我已经能够创建我的应用程序,因此它可以获取带有多张工作表的 Excel 文件并将它们放入数据库中。但是,我不确定如何使用我尝试查看的 30mb+ 大文件来执行此操作,bufferedReader
但我不确定这是我想要的,因为它一次读取一部分并且我正在使用 Apache POI 读取多个 Excel 表。
目前,如果我将文件发送到大文件,我会收到 Java 堆空间错误,这就是为什么我觉得文件太大的原因。在测试期间它运行良好,然后我使用了 32mb 文件,但它失败了。
以下是代码,我提前感谢任何帮助。myfile 也是一个参数
ci_model = createObject("component", "com.data_feeds.models.ci.model_item_setup");
FileIn = createObject("java","java.io.FileInputStream").init(javacast("string", myfile));
wb = createObject("java","org.apache.poi.xssf.usermodel.XSSFWorkbook").init(FileIn);
workbook = createObject("java","org.apache.poi.xssf.streaming.SXSSFWorkbook").init(wb);
sheetCount = workbook.getNumberOfSheets();
for(sheetIndex = 0; sheetIndex LT sheetCount; sheetIndex = sheetIndex + 1)
{
recordIndex = 1;
sheet = workbook.getSheetAt(sheetIndex);
rowHeader = sheet.getFirstRowNum();
rowCount = sheet.getLastRowNum();
for (rowIndex = 1; rowIndex LTE rowCount; rowIndex = rowIndex + 1)
{
row = sheet.getRow(rowIndex);
columnCount = row.getLastCellNum();
for(columnIndex = 0; columnIndex LT columnCount; columnIndex = columnIndex +1)
{
record[recordIndex][columnIndex+1] = row.getCell(columnIndex);
if((columnIndex+1)==4)
{
record[recordIndex][columnIndex+1] = ci_model.boolean_number(row.getCell(columnIndex).toString());
}
}
recordIndex = recordIndex + 1;
if(recordIndex == 500)
{
this.insert_record(record);
arrayClear(record);
request.help.debug.collect_garbage();
recordIndex = 1;
}
}
this.insert_record(record);
arrayClear(record);
}
FileIn.close();
我正在使用 ColdFusion 8。