通过java更新文件后导致excel崩溃的原因是什么?

时间:2017-01-24 23:01:53

标签: java excel apache-poi

我有一些java代码打开excel表,将自动过滤器添加到一组列,然后保存并关闭。问题是,当用户打开文件并尝试从最小到最大或最大到最小的excel时,将冻结然后崩溃。但是如果你先进行过滤,那么你就可以排除问题并且它不会冻结和崩溃。

private static void AddFilter()
{
    //Adds filter to the rows in Column 2
    try 
    {
        FileInputStream fileIn = new FileInputStream("C:\\Users\\gria\\Desktop\\Fleet Manager Summary.xls");

        HSSFWorkbook report = new HSSFWorkbook(fileIn);

        Sheet sheet  = report.getSheetAt(0);
        sheet.setAutoFilter(CellRangeAddress.valueOf("A5:P5"));


        FileOutputStream fileOut = new FileOutputStream("C:\\Users\\gria\\Desktop\\Fleet Manager SummaryT.xls");
        report.write(fileOut);
        fileOut.close();
    } 
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

谢谢,

更新 经过一些实验,我已经更新了信息和代码,因为要求原始问题更好地解释问题。

1 个答案:

答案 0 :(得分:0)

尝试更改

XSSFFormulaEvaluator.evaluateAllFormulaCells(report);

HSSFFormulaEvaluator.evaluateAllFormulaCells(report);

XSSFFormulaEvaluator.evaluateAllFormulaCells()适用于XSSfWorkbook,但不适用于HSSFWorkbook。

Documentation

另外, 您可以将评论代码编辑为:

for(int i = 5; i < sheet.getLastRowNum(); i++) 
{
    Cell cell = sheet.getRow(i).getCell(6);

    //I don't know if you have data in all of the cells,
    //So I suggest you to evaluate null
    if(cell != null && !cell.getStringCellValue().isEmpty())
    {
        cell.setCellValue(Double.valueOf(cell.getStringCellValue()).doubleValue());
    }
}