POIを使用すると、ストリーミング形式でExcelファイルを読むことができます。 APIはSAXのラッパーです。 Stringを受け取るコンストラクタを使用して、正しい方法でOPCパッケージを開いてください。そうしないと、すぐにメモリ不足になる可能性があります。
OPCPackage pkg = OPCPackage.open(file.getPath());
XSSFReader reader = new XSSFReader(pkg);
さて、読者はあなたが異なる部分についてInputStreams
を取得できるようになります。自分自身でXML解析(SAXまたはStAXを使用)を実行する場合は、これらを使用できます。しかし、それはフォーマットに非常に精通している必要があります。
より簡単なオプションはXSSFSheetXMLHandlerです。
StylesTable styles = reader.getStylesTable();
ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg);
ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, mySheetContentsHandler, true);
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(handler);
parser.parse(new InputSource(reader.getSheetsData().next()));
mySheetsContentHandlerがXSSFSheetXMLHandler.SheetContentsHandlerを独自に実装する必要があります:ここでは最初のシートを読み込む例です。このクラスには行とセルが与えられます。
ただし、共有文字列テーブルが巨大であれば、これは適度にメモリを消費する可能性があります(巨大なシートに重複文字列がない場合に発生します)。それでもメモリが問題になる場合は、生のXMLストリーム(XSSFReaderも提供)を使用することをお勧めします。
EclipseからEclipseを実行していますか?どのようにメモリオプションを設定しましたか?あなたの設定が適切に行われなかったと思います。 –
はい、Eclipse IDEを使用していて、次のように変更しました... 1)eclipse.iniで-Xmx256Mを-Xmx-1024Mに編集しました。2)IDEウィンドウ - > prefrences-> Installed JRE-> Xms256M -Xmx1024MのデフォルトVM引数。私はそれが日食に反映されている可能性がありますIDE – Avinash