我有这样内容的excel文件:
A1:一些字符串
A2:2
所有字段都设置为字符串格式。
当我使用 POI 在 java 中读取文件时,它告诉 A2 是数字单元格格式。
问题是 A2 中的值可以是 2 或 2.0 (我希望能够区分它们)所以我不能只使用
.toString()
。
我该怎么做才能将值读取为字符串?
原文由 joycollector 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有这样内容的excel文件:
A1:一些字符串
A2:2
所有字段都设置为字符串格式。
当我使用 POI 在 java 中读取文件时,它告诉 A2 是数字单元格格式。
问题是 A2 中的值可以是 2 或 2.0 (我希望能够区分它们)所以我不能只使用 .toString()
。
我该怎么做才能将值读取为字符串?
原文由 joycollector 发布,翻译遵循 CC BY-SA 4.0 许可协议
当你问这个问题时,我认为我们没有回到这堂课,但今天有一个简单的答案。
您要做的是使用 DataFormatter 类。您向它传递一个单元格,它会尽力返回一个字符串,其中包含 Excel 会为您显示的该单元格的内容。如果你传递给它一个字符串单元格,你会得到字符串。如果您向它传递一个应用了格式规则的数字单元格,它将根据它们格式化数字并返回给您字符串。
对于您的情况,我假设数字单元格应用了整数格式设置规则。如果您要求 DataFormatter 格式化这些单元格,它会返回一个包含整数字符串的字符串。
另外,请注意很多人建议做 cell.setCellType(Cell.CELL_TYPE_STRING)
,但是 Apache POI JavaDocs 非常明确地指出你不应该这样做!执行 setCellType
调用将松散格式,因为 javadocs 解释 了转换为保留格式的 String 的唯一方法是使用 DataFormatter 类。
使用此类的一个简单示例:
DataFormatter dataFormatter = new DataFormatter();
String formattedCellStr = dataFormatter.formatCellValue(cell);
原文由 Gagravarr 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.3k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答4k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
我有同样的问题。在读取字符串值之前,我做了
cell.setCellType(Cell.CELL_TYPE_STRING);
,无论用户如何格式化单元格,它都解决了问题。