Java ApachePOI:强制celldata类型为无公式?

Java ApachePOI:强制celldata类型为无公式?,java,excel,apache-poi,Java,Excel,Apache Poi,添加来自不同来源的纯文本时,我注意到ApachePOI(3.17)自动假定以=开头的字符串被解释为公式。这通常很好,但如何确保在这种特殊情况下,单元格不是公式 我假设在添加以=开头的字符串后,我可以告诉ApachePOI类型是CellType.String: cell.setCellType(CellType.STRING); 但这并不会产生预期的结果,字符串仍然作为公式在output.xlsx文件中读取(使用LibreOffice)。目前,我正在检查每个添加的字符串是否以=开头,并将其

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

我假设在添加以
=
开头的字符串后,我可以告诉ApachePOI类型是
CellType.String

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

strOut = in_CSV(i,j);
strOut = strOut.startsWith("=") ? "'"+strOut : strOut;

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

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

因此,简单地在单元格内容前面加上撇号将是错误的做法。这在导入
Excel
中的文本(
CSV
)时有效,因为前面的撇号将自动解释为引号前缀。但是在
*.xls
*.xlsx
文件中,此自动程序不会在所有情况下都正常工作。因此,我们需要真正设置
CellFormat.QuotePrefix属性
,就像在编辑器栏中键入单元格内容的前导撇号后的
Excel
一样


这可以通过创建一个已设置的字符串来使用apache poi来完成。

打开文件后,通过Excel或Calc将以
=
开头的字符串解释为公式。因此,
apache-poi
只能在文件中使用与
Excel
相同的标记来将以
=
开头的字符串标记为而不是公式时防止这种情况。此标记称为“引号前缀”。它在
Excel
的编辑栏中看起来像一个撇号,但实际上并不是单元格内容的一部分

因此,简单地在单元格内容前面加上撇号将是错误的做法。这在导入
Excel
中的文本(
CSV
)时有效,因为前面的撇号将自动解释为引号前缀。但是在
*.xls
*.xlsx
文件中,此自动程序不会在所有情况下都正常工作。因此,我们需要真正设置
CellFormat.QuotePrefix属性
,就像在编辑器栏中键入单元格内容的前导撇号后的
Excel
一样


这可以使用
apache-poi
通过创建已设置的字符串来实现。

不,没有其他方法,因为它不是
apache-poi
使以
=
开头的字符串成为公式的原因<代码>Excel在打开文件后执行此操作。但是你不应该在撇号前面加前缀。相反,使用
CellStyle
having.Perfect,只需测试它,它就能按预期工作。这正是我的想法,使用POI函数而不是自己检查和修改字符串,我只是找错了类。谢谢,如果你想把它作为一个解决方案添加,我当然会接受。重新检查它是否有效,只是没有添加让我感到不舒服的
没有其他方法,因为它不是
apache poi
使以
=
开头的字符串成为公式的原因<代码>Excel在打开文件后执行此操作。但是你不应该在撇号前面加前缀。相反,使用
CellStyle
having.Perfect,只需测试它,它就能按预期工作。这正是我的想法,使用POI函数而不是自己检查和修改字符串,我只是找错了类。谢谢,如果你想添加它作为解决方案,我当然会接受。重新检查它是否有效,只是没有添加使我失望的