首页 > 解决方案 > 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;
    }

标签: java

解决方案


让我们来看看:

  • 将整个工作表加载到内存中
  • 更新一个单元格
  • 将整个工作表写回文件
  • 对下一行/单元格重复所有操作

现在为什么会很慢?
因为读写文件很慢。

你应该:

  • 加载一次
  • 更新所有需要更新的行/单元格
  • 将结果保存回文件

推荐阅读