You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache POI生成含IFS公式的Excel单元格显示#NAME?问题排查

问题:Apache POI生成Excel后公式显示#NAME?,手动回车才生效

我尝试在Excel中使用嵌套公式,根据当前工作表其他列的条件计算「Upgrade Effort」,所用公式如下:

=@IFERROR(@IFS(C3="css", IFS(D3>0.5, "High",
 D3>0.3, "Medium", D3>0.2, "Low",D3>0,"Very Low", 
 D3=0, "None")),
 IFS(D3>0.5,"High",D3>0.3,"Medium",D3>0.2,"Low",D3>0,
 "Very Low",D3=0,"None"))

通过Apache POI编写Java代码生成Excel后,公式单元格未自动计算,显示#NAME?;仅选中单元格按回车,弹出警告后公式才会正确计算。

所用Java代码示例

import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class CreateExcekFormula {

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

        try (Workbook workbook = new XSSFWorkbook();
                FileOutputStream fileout = new FileOutputStream("ItemFilter.xlsx")) {

            Sheet dataSheet = workbook.createSheet("Data");

            Row row;
            Cell cell;
            String strFormula = "IFERROR(IFS(%s=\"css\", IFS(%s>0.5, \"High\", %s>0.3, \"Medium\", %s>0.2, \"Low\", %s>0, \"Very Low\", %s=0, \"None\")),IFS(%s>0.5,\"High\",%s>0.3,\"Medium\",%s>0.2,\"Low\",%s>0,\"Very Low\",%s=0,\"None\"))\r\n"
                    + "";
            Object[][] data = new Object[][] 
                { new Object[] 
                            { "Header", "Complexity", "Type of File", "Change", "Upgrade Effort" },
                  new Object[] 
                  { "A", "High", "css", "1" },
                  new Object[] 
                  { "A", "Low", "txt", "0.4" },
                  new Object[] 
                  { "C", "Moderate", "css", "0.4" },
                  new Object[] 
                  { "D", "High", "txt", "0.7" },
                  new Object[] 
                  { "A", "High", "css", "0.8" },
                  new Object[] 
                  { "B", "Low", "css", "0.2" },
                  new Object[] 
                  { "G", "Low", "css", "0.1" },
                  new Object[] 
                  { "G", "High", "properties", "0.4" },
                  new Object[] 
                  { "G", "High", "css", "1" },
                  new Object[] 
                  { "G", "High", "css", "0.2" },
                  new Object[] 
                  { "G", "Low", "jsp", "0.8" },
                  new Object[] 
                  { "H", "Low", "jsp", "0.6" },
                  new Object[] 
                  { "H", "Low", "html", "0.4" } };
            for (int r = 0; r < data.length; r++) {
                row = dataSheet.createRow(r);
                Object[] rowData = data[r];
                for (int c = 0; c < rowData.length; c++) {
                    cell = row.createCell(c);
                    if (rowData[c] instanceof String) {
                        cell.setCellValue((String) rowData[c]);
                    } else if (rowData[c] instanceof Number) {
                        cell.setCellValue(((Number) rowData[c]).doubleValue());
                    }
                }
                if (rowData.length < 5) {
                    cell = row.createCell(4);
                    String fileTypeCol = "C" + (r + 1);
                    String changeCol = "D" + (r + 1);
                    String formula = String.format(strFormula, fileTypeCol, changeCol, changeCol,
                            changeCol, changeCol, changeCol, changeCol, changeCol, changeCol,
                            changeCol, changeCol);
                    System.out.println("Formula ====== " + formula);
                    cell.setCellFormula(formula);
                }
            }

            XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

            workbook.write(fileout);
            fileout.close();
            Desktop.getDesktop().open(new File("ItemFilter.xlsx"));

        }

    }
}

问题现象

单元格显示#NAME?


内容的提问来源于stack exchange,提问作者pranavs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:50:41