gpt4 book ai didi

excel - 为什么逻辑 IFS() 函数总是以小写形式呈现?

转载 作者:行者123 更新时间:2023-12-04 21:30:17 25 4
gpt4 key购买 nike

我正在从 java 代码动态生成 XLSX 文件,并设置公式。除了 IFS() 函数外,所有工作都正常,而似乎总是使用小写的“ifs()”进行渲染,因此当打开生成的文件时,libreoffice 无法将其识别为函数。所有其他公式,例如普通的旧“如果”工作得很好

我试过调试 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,"是”,“否”)(结果"is")。如果我手动将“ifs”更改为“IFS”,则公式可以正常工作并显示"is"。

最佳答案

最新 LibreOffice Calc支持IFS .但是如果它节省了*.xlsx文件然后它存储IFS使用 _xlfn 的公式字首。通常是 _xlfn前缀表示 The Excel workbook contains a function that is not supported in the version of Excel that you are currently running. .看来LibreOffice Calc尝试保存 Excel 2016兼容模式。 IFS function来自 Office 365仅向上。而且由于它使用该前缀进行存储,因此在阅读 *.xlsx 时似乎需要该前缀也。

甚至Office 365 Excel专卖店_xlfn.IFS进入*.xlsx文件,而不仅仅是 IFS (今天测试,2019 年 1 月 21 日)。所以LibreOffice Calc期望该前缀也是正确的。

以下适用于我使用 apache poi 4.0.1用于创建 *.xlsx并使用 LibreOffice Calc (版本:6.0.7.3 Build ID:1:6.0.7-0ubuntu0.18.04.2)以及使用Office 365用于打开 *.xlsx然后。

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

class TestIFS {

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

try (XSSFWorkbook workbook = new XSSFWorkbook(); FileOutputStream out = new FileOutputStream("TestIFS.xlsx")) {
String formulaIFS = "_xlfn.IFS(1=0,\"first\",0=0,\"second\")";
String formulaIF = "IF(1=0,\"yes\",\"no\")";
Sheet sheet = workbook.createSheet("IFStest");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellFormula(formulaIFS);
cell = row.createCell(1);
cell.setCellFormula(formulaIF);
workbook.write(out);
}
}
}

关于excel - 为什么逻辑 IFS() 函数总是以小写形式呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54291388/

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