Excel公式没有更新从Java应用程序使用Apache POI行删除

我在我的应用程序中使用Apache POI将数据写入Excel文件。 我有一个Excel文件模板,还有一些公式也在里面。 在我的应用程序中,我使用了excel模板,写入它,然后删除未使用的行,最后计算公式。 我在文件中使用SUM公式。 问题是当行被删除时,SUM公式不会更新,因为哪些错误值在Excel中出现。

示例:使用的公式是:对于单元格B215:SUM(B15:B214)。 在应用程序中,写入文件后,我删除了未使用的行。 现在我有数据到第70行的所有其他行已被删除。 所以我的公式应该更新为:SUM(B15:B69)的单元格B70。 但是在文件中它仍然将公式显示为SUM(B15:B214)。 因此,该单元格的值是“VALUE#

代码片段:

File file = new File(path) InputStream is = new FileInputStream(file) POIFSFileSystem fs = new POIFSFileSystem(is) HSSFWorkbook wb = new HSSFWorkbook(fs) HSSFSheet excelSheet int[] indexArray = populateSheet(excelSheet) 

// indexArray是具有3个值的数组,作为startrow,lastrow和第一个空行。

 removeBlankRows(excelSheet,indexArray) //evaluate formula FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator() for(HSSFRow r : excelSheet) { for(HSSFCell c : r) { if(c.getCellType() == Cell.CELL_TYPE_FORMULA) { String formula = c.getCellFormula(); evaluator.evaluateFormulaCell(c) } } } private void removeBlankRows(HSSFSheet sheet, int[] shiftInfo){ for(int i = shiftInfo[2]; i <= shiftInfo[1]; ++i) { sheet.removeRow(sheet.getRow(i)) } //Shift up the rows def startRow = shiftInfo[1]+1 def endRow = sheet.getLastRowNum() def rowCount = -1* (shiftInfo[1] - shiftInfo[2] + 1) sheet.shiftRows(startRow, endRow, rowCount) } 

这是一个Excel错误。 过去我已经做了以下的处理:

  1. 标注总和单元格
  2. 我们需要一个稳定的范围,不会受到插入/删除的影响。 将一个公式添加到一个安全的(不会被删除的)单元格中,例如D15:=“B15:B”&ROW(BSUM)-1这将产生一个稳定的范围。
  3. 在BSUM单元格中使用INDIRECT如下所示:
    = SUM(INDIRECT(D15))