添加来自不同来源的纯文本,我注意到 Apache POI (3.17) 自动假定以 =
开头的字符串被解释为公式。这通常没问题,但我如何确保在这种特殊情况下,单元格不是公式?
我假设添加以 =
开头的字符串后,我可以告诉 Apache POI 类型为 CellType.STRING
:
cell.setCellType(CellType.STRING);
但这不会产生预期的结果,字符串仍然在输出 .xlsx 文件中作为公式读取(使用 LibreOffice)。目前,我正在检查每个添加的字符串是否以 =
开头并将其替换为 '=
但我更愿意避免所有这些检查。我目前如何处理它的示例:
strOut = in_CSV(i,j);
strOut = strOut.startsWith("=") ? "'"+strOut : strOut;
那么有没有更好的方法来确保我的输出不是 Apache POI 中的论坛?
最佳答案
将以 =
开头的字符串解释为公式是由 Excel
或 Calc
打开文件。因此,apache poi
仅当在文件中使用与 Excel
相同的标记才能防止这种情况发生,而 Excel
将使用该标记来将以 =
开头的字符串标记为 不是公式。该标记称为“引号前缀”。它看起来像 Excel
编辑器栏中的撇号,但实际上并不是单元格内容的一部分。
因此,简单地将撇号放在单元格内容前面将是错误的方法。这在 Excel
中导入文本 (CSV
) 时有效,因为前导撇号将自动解释为引号前缀。但在 *.xls
或 *.xlsx
文件中,此自动功能并非在所有情况下都能正常工作。因此,我们需要真正设置 CellFormat.QuotePrefix Property
,就像 Excel
在编辑器栏中向单元格内容输入前导撇号后所做的那样。
这可以使用 apache poi
通过创建 CellStyle 来完成已设置 setQuotePrefixed(true) .
关于java - Apache POI : Force celldata type to be NO formula?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53755083/