0

XLSM ファイル メタデータを 4 MB 未満のファイルに読み込む必要があります。次の手順は正しく機能します。

try {
OPCPackage pkg = OPCPackage.open (new FileInputStream ("C:\\Path to file.xlsm"));
XSSFWorkbook XSSFWorkbook = new document (pkg);
documento.getProperties poixmlProperties = ();
...
} catch (Exception ex) {
...
} finally {
...
}

4 MB を超えるファイルの場合、2 行目は実行されません(XSSFWorkbook document=new XSSFWorkbook (pkg))。エラーを発生させることなく、finally ブロックに直接ジャンプします。

4

1 に答える 1

0

まず、File オブジェクトがある場合は InputStream を使用しないでください。InputStream を使用すると、POI はすべてをメモリにバッファする必要がありますが、ファイルを使用すると、必要になるまでディスクに残すことができます。POI ドキュメントで説明されているように、代わりに次のように開きます。

OPCPackage pkg = OPCPackage.open(new File("file.xlsx"));

次に、Excel 構造全体を開いてメモリに解析しているようですが、必要なのはメタデータだけです。しないでください!XSSFWorkbook の起動にはかなりの処理とメモリが必要ですが、ファイルの別の領域に存在するメタデータだけを気にする場合は必要ありません。

代わりに、プロパティ自体をロードして、それを操作してください。最終的なコードは次のようになります。

OPCPackage pkg = OPCPackage.open(new File("file.xlsx"));
POIXMLProperties props = new POIXMLProperties(pkg);
System.out.println("The title is " + props.getCorePart().getTitle());

メモリ使用量として、ファイルの合計サイズのほんの一部でロードする必要があります

于 2013-08-27T23:07:02.210 に答える