We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

サイズの大きいExcelファイルをPDFに変換すると、処理が停止してしまう

お世話になっております。
現在「Aspose.Cells.for Java 21.5」を使用しています。
処理としては複数スレッドを立てており.、
各々のスレッドでExcelファイルをオープン/書込み処理、PDFへの変換を行っているのですが、
サイズが大きなファイル(約20MB、200シートで構成されたファイル)をPDFに変換しようとすると
突然処理が停止してしまいます。

またその際にaspose側ではexceptionが発生しておらず、まさに突然停止しているように見えます。
なお現象が発生した際のCPU/メモリを見ても、60~70%で推移しており、リソース的にはまだ
余裕がある状態です。

(PDFに変換するロジック)
stream = new ByteArrayOutputStream();
workbook.save(stream, SaveFormat.PDF);

上記を踏まえてお聞きします。
①Aspose.Cells.for Javaとしては、動作するマシンスペックとは別に、
使用メモリ/CPUに上限値はありますか?
また、1回で処理可能なファイルサイズ(シート数)に上限はありますか?

②今回のようにサイズが大きなファイルを変換する際に注意すべき事や、
コード上、設定した方が良いプロパティなどがありましたら教えてください。

以上、宜しくお願い致します。

@ika0616,
Aspose.Cells for Java APIには、メモリやCPUに関連する制限はありません。 大きなファイルを処理するためにプロパティを設定する必要もありません。

それでも問題が発生する場合は、入力ファイルを共有してください。

@ahsaniqbalsidiqui

本件について、すみません最初「処理が停止してしまう」と記載しておりましたが、
停止するのはこちら側の問題でした。一旦忘れて下さい。

今問題となっている事象としては、比較的容量があるファイルに対して[workbook.save(stream, SaveFormat.PDF);]メソッドを使ってPDF変換すると、処理時間が非常に長く困っております。
(動作環境)
AWS ECSサービスにてdockerコンテナ上で動作
Fargateインスタンスのスペック:CPU=2048、メモリ=4096

(処理概要)
テンプレートのExcelファイルを読み込み、データセットの内容をもとに
各セルに対して値をセットし、データ1行ごとにシートを追加する。
作成済みのbookに対して、最後にsaveメソッドを使用してPDFへ変換している。
(ロジックを抜粋して添付します。)

(処理時間)
手元のデータでは、最終的に50シートのExcelファイルが作成され、
それをPDFへ変換しています。処理時間としては、早くて40秒、
遅いと2分近くかかってしまいます。
現状のやり方(1つのブックに対してシートを追加し、後でまとめてPDFへ変換する手法)では
無理がある場合は、別の方法(シート毎にブックを分けて保存し、
1回のsaveメソッドで処理する容量を抑え、後で個々のブックを結合する手法)も
検討しなければいけません。

上記を踏まえて質問です。
(質問)
①そもそも今回のように容量が大きいファイルを一括でPDF変換する事自体に無理がありますか?

②現在のように最短でも40秒程度かかるのは妥当なのでしょうか?

③仕様上、saveメソッドには追記型のメソッドはありますか?
(シート毎にPDFへ追記していくイメージ)

④今回はマルチスレッドを生成し、各スレッド毎にasposeを使ってファイル生成をしています。
(作成するファイルは重複しない)asposeとしてはマルチスレッド下で使用する場合の懸念点
(特にCPU、メモリなどのリソースに関する懸念点)があれば教えてください。

以上、よろしくお願いします。

関連資料.zip (6.8 MB)

※添付資料の構成
・ロジック抜粋.txt
→出力ロジックの抜粋です
・使用するテンプレートファイル.xlsx
→処理に使用するテンプレートファイルです。
**で始まるセルに対して値をセットしています。
・PDFに変換する直前のExcel.xlsx
→PDFに変換する直前のExcelです。このファイルと同等の内容でPDFが
出力されます。(出力枚数は100ページ)

@ika0616,
サンプルコードはコンパイルできないため、ファイルを並行して変換するための実行可能なコードを共有してください。 また、大きなファイルをPDFに変換することも可能です。

私たちの側では約12秒かかります。これは、MSExcelで消費される時間とほぼ同じです。

3番目の質問についてもう少し説明してください。

Aspose.Cells for Java APIはスレッドセーフであり、マルチスレッドメソッドで使用できます。

@ahsaniqbalsidiqui
お世話になっております。
本件について、ご提示頂いた1ファイルの変換時間「12秒」 については、
こちらの環境下で再度検証したところほぼ同等の時間で処理されました。
但しこれはシングルスレッド下での実行時間で、マルチスレッドにすると
変換時間が著しく落ちました。
(2スレッドで「25秒」、4スレッドで「56秒」、8スレッドで「132秒」)

上記内容を踏まえて、こちらとしてはシングルスレッドの変換時間「12秒」を基準にして、
マルチスレッドで実行する事を諦め、Fargateのインスタンスを増やして処理する事で、
疑似的にマルチスレッドを実現する事にしました。

その為、本件は一旦クローズして結構です。
また何かありましたらよろしくお願いします。

@ika0616,

Aspose.Cellsの部分には何もないようで、期待どおりに機能しています。

Aspose.Cellsに関してご質問や問題がございましたら、お気軽にお問い合わせください。