java - 使用 HSSF 从 Excel 中读取字符串值,但它是双倍的

标签 java excel apache-poi poi-hssf

我正在使用 HSSF-POI 读取 excel 数据。问题是我在一个看起来像数字但实际上是字符串的单元格中有值。如果我查看 Excel 中的格式单元格,它会显示类型为“文本”。 HSSF Cell 仍然认为它是数字。如何获取字符串形式的值?

如果我尝试使用 cell.getRichStringValue,我会得到异常;如果是 cell.toString,则它与 Excel 工作表中的值不完全相同。

编辑:在这个问题得到解决之前,我会使用

new BigDecimal(cell.getNumericCellValue()).toString()

最佳答案

您在 POI 中查找的类(class)是 DataFormatter

当 Excel 写入文件时,一些单元格存储为文字字符串,而其他单元格存储为数字。对于后者,表示单元格的浮点值存储在文件中,因此当您向 POI 询问单元格的值时,它就是它实际具有的值。

虽然有时,尤其是在进行文本提取时(但并非总是如此),您希望使单元格值看起来像在 Excel 中一样。在 String 中并不总是能够准确地得到它(例如,非完整的空格填充),但 DataFormatter 类会让你接近。

如果您正在查找单元格的字符串,并且看起来与在 Excel 中看起来很像,只需执行以下操作:

 // Create a formatter, do this once
 DataFormatter formatter = new DataFormatter(Locale.US);

 .....

 for(Cell cell : row) {
     CellReference ref = new CellReference(cell);
     // eg "The value of B12 is 12.4%"
     System.out.println("The value of " + ref.formatAsString() + " is " + formatter.formatCellValue(cell));
 }

格式化程序将按原样返回字符串单元格,对于数字单元格,会将样式上的格式设置规则应用于单元格的编号

关于java - 使用 HSSF 从 Excel 中读取字符串值,但它是双倍的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411157/

相关文章:

java - JDO 处理唯一约束冲突

java - 如何通过 ID 获取其他用户信息(用户名、名字)? [ key 斗篷]

java - Activity 不等待结果

javascript - VBA动态网页抓取Excel

java - 使用 Apache POI 和 Spring 框架将 Excel 文件上传到数据库

java - 如何在 Apache POI 中设置 Excel 默认行高

java - 为什么我可以像基元一样测试包装器的不平等?我可以为我创建的类(class)执行此操作吗?

跨选择的 Python Pandas XlsxWriter 中心

excel - Power Query - 添加自定义列取决于报告期间

java - 使用 POI 创建 Word 文件