我正在尝试执行以下代码将 xlsm 文件转换为 csv :
//Workbook wbk = new HSSFWorkbook(new FileInputStream(new File("myFile.xls")));
Workbook wbk = new XSSFWorkbook(new FileInputStream(new File("myFile.xlsm")));
for (int i = 0; i < wbk.getNumberOfNames(); i++) {
if (wbk.getNameAt(i).getNameName().startsWith("START\\")) {
// Get SheetName
sheetName = wbk.getNameAt(i).getSheetName();
// Get csv Filename
csvFilename = generateFileName(wbk.getNameAt(i).getNameName(), currentDate);
// Starting row index for this sheet
startingRowIndex = getStartingRowIndex(wbk, i);
// Max column index for this sheet
maxColumnIndex = getMaxColumnIndex(wbk, wbk.getSheet(sheetName));
// Convert sheet to csv
toCSV(csvFilename, startingRowIndex, maxColumnIndex, wbk, sheetName);
}
}
-Xmx 参数设置为 1024,我使用 xslm 文件。这个文件是 15 个月。
"java.lang.OutOfMemoryError: Java heap space"
我在第一行收到此错误。
使用 xls 格式 (50 Mo) 的相同文件,效果很好。
我无法更改 Xmx 参数,也无法使用 POI 以外的其他 API。
我在其他消息中读到更好的方法是使用SAX API来解决这种内存问题。
但是,在我的文件中,不需要在 CSV 中提取所有工作表和所有行。这就是为什么我使用“wbk.getNumberOfNames()”来获取所有定义的名称(在名称管理器中)并知道要转换的工作表。
你知道我如何使用 SAX API 访问这些属性吗?
谢谢。
问候。