11

私は次のコードを使用しています:

File file = new File("abc.xlsx");
InputStream st = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(st);

xlsxファイル自体には25,000行があり、各行には500列のコンテンツがあります。デバッグ中に、XSSFWorkbookを作成する3行目で、このステートメントを完了するのに多くの時間(1時間!)がかかることがわかりました。

元のxlsxファイルの値にアクセスするためのより良い方法はありますか?

4

2 に答える 2

22

まず、ファイルがある場合は、InputStream から XSSFWorkbook をロードしないでください。InputStream を使用するには、すべてをメモリにバッファリングする必要があり、スペースを消費し、時間がかかります。そのバッファリングを行う必要はないので、しないでください!

POI の最新のナイトリー ビルドを実行している場合は、非常に簡単です。コードは次のようになります。

File file = new File("C:\\D\\Data Book.xlsx");
OPCPackage opcPackage = OPCPackage.open(file);
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);

それ以外は非常に似ています:

File file = new File("C:\\D\\Data Book.xlsx");
OPCPackage opcPackage = OPCPackage.open(file.getAbsolutePath());
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
于 2012-06-22T16:30:29.640 に答える
0

POIのストリーミングバージョンの使用を検討してください。これにより、必要に応じてファイルのサブセットがメモリにロードされます。大きなファイルを扱う場合に推奨される方法です。

POI SXSSF

于 2012-06-22T10:46:45.513 に答える