【发布时间】:2019-06-14 22:14:47
【问题描述】:
我正在从 java 代码动态生成 XLSX 文件,并设置公式。除了 IFS() 函数外,所有工作都正常,而似乎总是使用小写的“ifs()”进行渲染,因此当打开生成的文件时,libreoffice 无法将其识别为函数。所有其他公式,例如普通的旧“IF”工作得很好
我已经尝试调试 POI ooxml 源代码,最后我能说的是单元格被正确设置为大写。我已经尝试更新到最新版本,预先格式化单元格内容......到目前为止还没有运气。此代码在 poi 4.0.1 上运行,我正在使用 libreoffice 6.1.3.2 打开文件(以防这可能是 libreoffice 问题?)。我无权访问 EXCEL 2016+ 来检查它如何处理生成的文件。
public void testIFS(){
try {
String IFSformula = "IFS(1,\"yes\",0,\"no\")";
String IFformula = "IF(1,\"yes\",\"no\")";
String outputFileName = "IFStest.xlsx";
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet poiSheet = workbook.createSheet("ifstest");
XSSFRow row = poiSheet.createRow(0);
XSSFCell cell0 = row.createCell(0);
cell0.setCellFormula(IFSformula);
XSSFCell cell1 = row.createCell(1);
cell1.setCellFormula(IFformula);
workbook.write(new FileOutputStream(outputFileName));
} catch (IOException ex) {
Logger.getLogger(IFSTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
现在,单元格 0 以 =ifs(1,"yes",0,"no") 结尾 - 这是错误的(结果是 #NAME),但单元格 1 工作得很好并且有一个单元格公式 =IF( 1,"yes","no")(结果为“yes”)。如果我手动将“ifs”更改为“IFS”,则公式可以正常工作并且还显示“是”。
【问题讨论】:
-
无法在本地模拟它,但以防万一这有帮助 - 您可以在
IF():IF((1)*(1)*(1),"yes","no")内执行多个逻辑条件 -
您是否检查过您的 XML 将文件标识为 Office 2016 .xlsx(支持
IFS),而不是 Office 2007 .xlsx(不支持IFS) -
IFS 不是 Excel 2013 中可识别的函数
-
@Glitch_Doctor - 我知道,但这仍然只允许 2 个结果,真假,我特别需要 X 个可能的结果。
标签: excel excel-formula apache-poi libreoffice-calc