我有一些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();
}
}
谢谢,
更新 经过一些实验,我已经更新了信息和代码,因为要求原始问题更好地解释问题。
答案 0 :(得分:0)
尝试更改
XSSFFormulaEvaluator.evaluateAllFormulaCells(report);
到
HSSFFormulaEvaluator.evaluateAllFormulaCells(report);
XSSFFormulaEvaluator.evaluateAllFormulaCells()适用于XSSfWorkbook,但不适用于HSSFWorkbook。
另外, 您可以将评论代码编辑为:
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());
}
}