Apache POI:强制单元格数据类型为无公式?

pts*_*one 2 java excel apache-poi

添加来自不同来源的纯文本,我注意到 Apache POI (3.17) 自动假定以 开头的字符串=被解释为公式。这通常很好,但我如何确保在这种特殊情况下,单元格不是公式

我假设添加以 开头的字符串后=,我可以告诉 Apache POI 类型是CellType.STRING

cell.setCellType(CellType.STRING);   
Run Code Online (Sandbox Code Playgroud)

但这不会产生预期的结果,字符串仍然在输出 .xlsx 文件中作为公式读取(使用 LibreOffice)。目前,我正在检查每个添加的字符串是否以 a 开头并将=其替换为'=,但我更愿意避免所有这些检查。我目前如何处理它的示例:

strOut = in_CSV(i,j);
strOut = strOut.startsWith("=") ? "'"+strOut : strOut;
Run Code Online (Sandbox Code Playgroud)

那么有没有更好的方法来确保我的输出不是 Apache POI 中的论坛?

Axe*_*ter 5

将以公式开头的字符串解释为打开文件时或打开文件=完成。因此,只有当它在文件中使用相同的标记(用于标记以非公式开头的字符串时)才能防止这种情况。这个标记称为“引用前缀”。它看起来像编辑器栏中的撇号,但实际上并不是单元格内容的一部分。ExcelCalc apache poiExcel=Excel

因此,简单地将撇号放在单元格内容前面将是错误的方法。这在导入文本 ( CSV)时有效Excel,因为前导撇号将自动解释为引号前缀。但在*.xls*.xlsx文件中,此自动功能并非在所有情况下都能正常工作。因此,我们需要真正进行设置CellFormat.QuotePrefix Property,就像Excel在编辑器栏中的单元格内容中输入前导撇号后所做的那样。

apache poi这可以通过创建一个设置了setQuotePrefixed(true)的CellStyle来完成。