java - JAVA写入超过5000行后Excel写入变慢
问题描述
在 excel 文件中写入 5000 行后,它将在 excel 中写入缓慢。
谁能建议我如何加快编写 excelfile 的速度?
我正在用 selenium 从我的网站上抓取数据 - java
当我开始我的代码时,编写速度很快,但在 1 小时后变得很慢。(CPU 和 RAM 消耗是正常的。)
这是编写excel文件的代码。
public boolean setCellData(String sheetName,String colName,int rowNum, String data){
try{
fis = new FileInputStream(path);
workbook = new XSSFWorkbook(fis);
if(rowNum<=0)
return false;
int index = workbook.getSheetIndex(sheetName);
int colNum=-1;
if(index==-1)
return false;
sheet = workbook.getSheetAt(index);
row=sheet.getRow(0);
for(int i=0;i<row.getLastCellNum();i++){
//System.out.println(row.getCell(i).getStringCellValue().trim());
if(row.getCell(i).getStringCellValue().trim().equals(colName)) {
colNum=i;
break;
}
}
if(colNum==-1)
return false;
sheet.autoSizeColumn(colNum);
row = sheet.getRow(rowNum-1);
if (row == null)
row = sheet.createRow(rowNum-1);
cell = row.getCell(colNum);
if (cell == null)
cell = row.createCell(colNum);
cell.setCellValue(data);
fileOut = new FileOutputStream(path);
workbook.write(fileOut);
fileOut.close();
}
catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
解决方案
让我们来看看:
- 将整个工作表加载到内存中
- 更新一个单元格
- 将整个工作表写回文件
- 对下一行/单元格重复所有操作
现在为什么会很慢?
因为读写文件很慢。
你应该:
- 加载一次
- 更新所有需要更新的行/单元格
- 将结果保存回文件