gpt4 book ai didi

java - Apache POI - CONCAT 函数未实现错误

转载 作者:行者123 更新时间:2023-12-04 21:27:41 24 4
gpt4 key购买 nike

我正在尝试编辑一个包含公式的 excel 文档,编辑工作正常,但公式没有更新。
我正在尝试使用以下代码来评估公式,但是出现错误

FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
for (Row r : sheet) {
for (Cell c : r) {
evaluator.evaluateFormulaCell(c);
}
}

Exception in thread "AWT-EventQueue-0" org.apache.poi.ss.formula.eval.NotImplementedException: Error evaluating cell Sheet1!C17at org.apache.poi.ss.formula.WorkbookEvaluator.addExceptionInfo(WorkbookEvaluator.java:344)at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateAny(WorkbookEvaluator.java:285)at org.apache.poi.ss.formula.WorkbookEvaluator.evaluate(WorkbookEvaluator.java:216)at org.apache.poi.xssf.usermodel.BaseXSSFFormulaEvaluator.evaluateFormulaCellValue(BaseXSSFFormulaEvaluator.java:56)at org.apache.poi.ss.formula.BaseFormulaEvaluator.evaluateFormulaCell(BaseFormulaEvaluator.java:185)at Timetable.ExcelAPI.calculateFormula(ExcelAPI.java:139)


单元格 C17 具有以下公式。
=IF(C3="","",CONCAT($A17,$B17,C3,$B17,$A$16))
我也试过
=IF(C3="","",CONCATENATE($A17,$B17,C3,$B17,$A$16))
如果我以编程方式创建它的公式
cell.setCellFormula("IF(C3=\"\",\"\",CONCAT($A17,$B17,C" + (start + 1) + ",$B17,$A$16))");

最佳答案

由于Excel apache poi的功能支持在 Excel 2007标准,CONCATENATE已实现,但 CONCAT不是。在 Excel 2007 之后引入的更多功能以 _xlfn. 为前缀.
因此,您的完整堆栈跟踪应包含:

...
Caused by: org.apache.poi.ss.formula.eval.NotImplementedFunctionException: _xlfn.CONCAT
...
解决方法可能是在评估之前将公式中的“_xlfn.CONCAT”替换为“CONCATENATE”。
以下代码适用于我并评估 CONCATENATE以及 CONCAT公式。
import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;

class ReadExcel {

public static void main(String[] args) throws Exception {

Workbook workbook = WorkbookFactory.create(new FileInputStream("./ExcelExampleConcatenate.xlsx"));
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();

DataFormatter dataFormatter = new DataFormatter();

Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
if (cell.getCellType() == CellType.FORMULA && cell.getCellFormula().contains("_xlfn.CONCAT")) {
cell.setCellFormula(cell.getCellFormula().replace("_xlfn.CONCAT", "CONCATENATE"));
}
String value = dataFormatter.formatCellValue(cell, evaluator);
System.out.println(value);
}
}
workbook.close();
}
}

关于java - Apache POI - CONCAT 函数未实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66441293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com