I Iは、Excelファイルのシート名を取得するために使用し、次のコードを持っている(の.xlsx)のApache POI
XSSFWorkbook workBookXlsx = new XSSFWorkbook(new FileInputStream(pathToFile));
ArrayList<String> sheetNames = new ArrayList<>();
int numberOfSheets = workBookXlsx.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
sheetNames.add(workBookXlsx.getSheetAt(i).getSheetName());
}
workBookXlsx = null;
私は上記のコードを持っている問題サイズが9MBのファイルに対しては、XSSFWorkbook
を作成するには、多くのメモリ(〜700MB)が長時間(5-6秒)&になるということです。でもnull
にworkBookXlsx
を設定すると(私はgc
がまたは私がnullに変数が設定されているという理由だけで文句を言わないメモリを解放& JVMと呼ばれることmaynotも知っている)
私はドキュメントを経るでしたjavaw
で撮影したメモリーを解放しませんWorkbook、XSSFWorkbook &私が理解したところから、メモリの少ないインプリントでシート名を得るのに役立つ方法はありません。
私が発見した一つの解決策は、手動で.xlsx
ファイルを解凍し、シート名とr:id
を取得するために.\xl\woorkbook.xml
の内容を読み取ることがあるなし.xlsx
ファイル内のシート名を取得するためのAPIがあります大きなメモリの刻印? @Gagravarrは、おそらく彼のコメントで何を意味するのか表示するには
低レベルの[SAXベースのAPI](http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api)を使用してシート処理ステップをスキップしてみませんか? – Gagravarr
https://stackoverflow.com/questions/46363139/how-to-get-list-of-named-range-sheet-name-and-referance-formuls-using-xssf-and-s/46364250#46364250 –
を参照してください。 @Gagravarr多くのシートがあるので、最初にシートを選択してからSAXパーサーを使用しなければなりません。 –