InputStreamを使用せずにJava Apache POIで既存のExcelファイルを更新する

Gaurav:

既存のExcelファイル(xlsx)を更新しようとしています。

以下のようなコンストラクタXSSFWorkbook(java.io.File file)とは、XSSFWorkbook(OPCPackage pkg)READ ONLYモードでファイルを開き、変更を許可していません。したがって、使用する必要がXSSFWorkbook(java.io.InputStream is)あり、メモリのフットプリント(JVMメモリとJavaヒープ)が高すぎます。並列で実行されている他のプログラムのメモリ要件を尊重する必要があるため、VM引数を使用して最大メモリサイズを設定することはできません。

を使用することSXSSFWorkbookも別のソリューションでしたが、本質的にはラッパーXSSFWorkbookです。と同じ問題が持続しXSSFWorkbookます。

SOの他の投稿に行ったが、関連する回答が見つからなかった。誰かがこれを手伝ってくれませんか?一時ファイルの保存には問題ありません。

アクセルリヒター:

あなたの質問は不明確です。実際には「XSSFWorkbook使用せずに開く方法」ではありませんInputStreamしかし、「メモリフットプリントを削減する方法はXSSFWorkbook?」そして、この質問への答えは、apache poi現在プログラムされているように、減らすことはできませんapache poiそうでなければ開発者はapache poi特にメモリを浪費するようにプログラムしたのと同じくらい愚かであるに違いありません彼らはそうではありません。

しかし、使用されている抽象化レベルが多すぎます。

すべてがXMLに基づいています。しかし、プログラミングライブラリのユーザーは、XMLや、特別なリレーションXMLファイルを使用してリンクされているZIPアーカイブ内の複数のファイルに分割されるその種のXMLに煩わされることを望まないでしょう。したがって、XMLの上にはooxml-schemas、単一ファイルのXMLを使用可能なjavaオブジェクトに取得するライブラリがあります。そしてorg.apache.poi.openxml4j.opc.*、関係を管理する必要があります。

このすべての利点を得るには、使用可能なすべてのjavaオブジェクト(ワークブック、シート、行、セル、図面、テーブル、ピボットテーブル、グラフなど)とそれらの関係がメモリ内になければ使用できませんまたは、*.xlsxZIPアーカイブから取り出した後、一時ファイルを使用して一時的に保存する必要があります。そのようなタイプのファイルシステムでの変更の動作のため、ZIPファイルシステムで直接作業することは私の意見ではオプションではありません。

ただし、一時ファイルの使用はで提供されていませんapache poiSXSSFワークシートに一時ファイルのみを使用し*.xlsxますが、新しいファイルの書き込みにのみ使用し、そのようなファイルの読み取りと更新には使用しません。

さらに、バイナリBIFF *.xlsファイル形式とできるだけ互換性を保つために、別のレベルが追加されています。これは、の高レベルのクラスを提供するSSand XSSFレベルですapache poiそのため、javaワークブック、シート、行、セル、図面、テーブル、ピボットテーブル、グラフなどの追加オブジェクトooxml-schemasがメモリ内の低レベルクラスに追加されています。

したがって、大きな*.xlsxファイルに関してはメモリがいっぱいです。;-)

ソリューション?

可能な限りメモリフレンドリーにするために、*.xlsxZIPアーカイブを解凍し、その中のXMLを直接操作します。もちろん、これは非常に面倒です。特に、新しいコンテンツを作成したり、関係を考慮に入れる場合はそうです。私はここで私の答えにこれの簡単な例を示しました。例:メモリに問題がある場合に大規模なExcelファイルを変更する方法およびjava + poiを使用してExcelでセルの背景色を設定する方法

または、apache poiすべてをメモリに保持する代わりに一時ファイルを使用する拡張機能をプログラミングします。もちろん、これも面倒で、一時ファイルの使用を提供しないシステムには不利です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java Apache POIでの既存のExcelファイルの更新

分類Dev

apache-poiでExcelファイルを更新するときのPOIXMLException

分類Dev

Apache POIを使用してExcelファイルで列の名前を取得する

分類Dev

Apache POIを使用したExcelファイルの更新

分類Dev

JavaでApache POIを使用してExcel(.xlsx)ファイルを作成すると、ファイルが破損する

分類Dev

Apache POI:Excelファイルに列を挿入する方法

分類Dev

Java Apache POI で作成した Excel ファイルを保存するために JFileChooser を使用する方法

分類Dev

Apache POIを使用してExcelファイルから列を取得するには

分類Dev

Apache POI Javaを使用して複数のExcelファイルを1つのExcelファイルにマージする

分類Dev

Apache POIを使用してMS Excelファイルタイプを決定する

分類Dev

Apache POIを使用して大きなExcelファイルのExcelシート名を取得する

分類Dev

Apache Poiを使用してExcelファイルの空または空白のセルを処理する方法

分類Dev

Apache POI経由で大きなExcelファイル(xlsx)を読み取る際のエラー

分類Dev

Apache POI棒グラフでExcelセルの外の値を使用する

分類Dev

Apache POIを使用してシートをExcelファイルに追加する - NullPointerExceptionによるPOIXMLException

分類Dev

Apache poi:jtableをファイルに保存する

分類Dev

Apache POIを使用してWordの.docxファイルでRSID属性を正しく生成する方法

分類Dev

Apache POI を使用して xlsx ファイルに書き込み、ファイルの最後の列で予想される回答を取得する

分類Dev

Apache-POI / Java / Excelファイルに書き込むときに行を除外する

分類Dev

Apache-POI / Java / Excelファイルに書き込むときに行を除外する

分類Dev

Apache poiで.xlsxファイルを読み取る方法は?

分類Dev

Apache POI を使用して MS Excel ファイルを読み取る方法は?

分類Dev

Apache POIで大きなxlsxファイルをロードする方法は?

分類Dev

Apache POIを使用してパスワードで保護されたExcelファイルを作成しますか?

分類Dev

Apache POI 4.1.1を使用してExcelファイルから値を読み取るときのエラー

分類Dev

Apache POIを使用してExcelファイルから数値を読み取る際の問題

分類Dev

Apache-POIを使用してExcelファイルからレコードを検索する効率的な方法

分類Dev

apache poiを使用して行数に基づいてExcelファイルを複数のファイルに分割するにはどうすればよいですか?

分類Dev

Apache POIでdocxファイルのチェックボックスを操作する

Related 関連記事

  1. 1

    Java Apache POIでの既存のExcelファイルの更新

  2. 2

    apache-poiでExcelファイルを更新するときのPOIXMLException

  3. 3

    Apache POIを使用してExcelファイルで列の名前を取得する

  4. 4

    Apache POIを使用したExcelファイルの更新

  5. 5

    JavaでApache POIを使用してExcel(.xlsx)ファイルを作成すると、ファイルが破損する

  6. 6

    Apache POI:Excelファイルに列を挿入する方法

  7. 7

    Java Apache POI で作成した Excel ファイルを保存するために JFileChooser を使用する方法

  8. 8

    Apache POIを使用してExcelファイルから列を取得するには

  9. 9

    Apache POI Javaを使用して複数のExcelファイルを1つのExcelファイルにマージする

  10. 10

    Apache POIを使用してMS Excelファイルタイプを決定する

  11. 11

    Apache POIを使用して大きなExcelファイルのExcelシート名を取得する

  12. 12

    Apache Poiを使用してExcelファイルの空または空白のセルを処理する方法

  13. 13

    Apache POI経由で大きなExcelファイル(xlsx)を読み取る際のエラー

  14. 14

    Apache POI棒グラフでExcelセルの外の値を使用する

  15. 15

    Apache POIを使用してシートをExcelファイルに追加する - NullPointerExceptionによるPOIXMLException

  16. 16

    Apache poi:jtableをファイルに保存する

  17. 17

    Apache POIを使用してWordの.docxファイルでRSID属性を正しく生成する方法

  18. 18

    Apache POI を使用して xlsx ファイルに書き込み、ファイルの最後の列で予想される回答を取得する

  19. 19

    Apache-POI / Java / Excelファイルに書き込むときに行を除外する

  20. 20

    Apache-POI / Java / Excelファイルに書き込むときに行を除外する

  21. 21

    Apache poiで.xlsxファイルを読み取る方法は?

  22. 22

    Apache POI を使用して MS Excel ファイルを読み取る方法は?

  23. 23

    Apache POIで大きなxlsxファイルをロードする方法は?

  24. 24

    Apache POIを使用してパスワードで保護されたExcelファイルを作成しますか?

  25. 25

    Apache POI 4.1.1を使用してExcelファイルから値を読み取るときのエラー

  26. 26

    Apache POIを使用してExcelファイルから数値を読み取る際の問題

  27. 27

    Apache-POIを使用してExcelファイルからレコードを検索する効率的な方法

  28. 28

    apache poiを使用して行数に基づいてExcelファイルを複数のファイルに分割するにはどうすればよいですか?

  29. 29

    Apache POIでdocxファイルのチェックボックスを操作する

ホットタグ

アーカイブ