【发布时间】:2014-01-24 04:32:22
【问题描述】:
我在我的应用程序中使用 Apache POI 将数据写入 Excel 文件。我有一个 excel 文件模板,里面还有一些公式。在我的应用程序中,我使用excel模板,写入它,然后删除未使用的行并最后计算公式。我在文件中使用 SUM 公式。问题是当行被删除时,SUM 公式没有更新,因为 excel 中出现了错误值。
示例:使用的公式是:对于单元格 B215:SUM(B15:B214)。在应用程序中,写入文件后,我删除未使用的行。现在我的数据直到文件中的第 70 行。所有其他行都已删除。所以我的公式应该更新为:单元格 B70 的 SUM(B15:B69)。但在文件中,它仍将公式显示为 SUM(B15:B214)。因此该单元格的值为“VALUE#
代码sn-p:
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 UI 正在触发自动公式更改,但 POI 只是在操作直接单元格,而不是解决对公式的更改。
-
如果您使用编码尝试更新您的帖子会有所帮助!
-
+1 提示更新相关代码
-
可惜代码无法编译
标签: java excel apache-poi excel-formula