java - Apache POI : Force celldata type to be NO formula?

标签 java excel apache-poi

添加来自不同来源的纯文本,我注意到 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 中的论坛?

最佳答案

将以 = 开头的字符串解释为公式是由 ExcelCalc 打开文件。因此,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/

相关文章:

Excel 导入 SQL 数据,但导入后更改 1 列的顺序

java - 浏览并选择 Excel 文件并在 java 中从中创建工作簿对象

java - listView 更新不适用于静态变量

java - 需要使用 jacoco.exec 文件生成代码覆盖率报告

java - OneSignal customKey 获取错误 : missing return statement report

使用 R 中的 openxlsx 从 Excel 工作表中读取列

python - openpyxl.charts 中的引用不起作用 (min_col) Python 3

java - 使用 poi sxssfworkbook 附加到工作簿

java - POI 3.12 VLOOKUP错误: Specified named range 'other sheet name' does not exist in the current workbook

java - 如何让正则表达式更加高效?