ega*_*aga 15 java excel poi-hssf apache-poi
我正在使用HSSF-POI来读取Excel数据.问题是我在单元格中的值看起来像一个数字,但实际上是字符串.如果我在Excel中查看格式单元格,则表示类型为"text".HSSF Cell仍然认为它是数字的.如何将值作为字符串获取?
如果我尝试使用cell.getRichStringValue,我会得到例外; 如果cell.toString,它与Excel表格中的值不完全相同.
编辑:直到这个解决,我会用
new BigDecimal(cell.getNumericCellValue()).toString()
Run Code Online (Sandbox Code Playgroud)
Gag*_*arr 11
您在POI中寻找的类是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));
}
Run Code Online (Sandbox Code Playgroud)
格式化程序将按原样返回String单元格,对于Numeric单元格,将样式的格式规则应用于单元格的编号
jt.*_*jt. 10
如果要解析的文档始终采用特定布局,则可以在运行时将单元格类型更改为"字符串",然后检索该值.例如,如果第2列应始终为字符串数据,请将其单元格类型设置为字符串,然后使用字符串类型的get方法读取它.
cell.setCellType(Cell.CELL_TYPE_STRING);
Run Code Online (Sandbox Code Playgroud)
在我的测试中,更改单元格类型并未修改单元格的内容,但允许使用以下任一方法检索它:
cell.getStringCellValue();
cell.getRichStringCellValue().getString();
Run Code Online (Sandbox Code Playgroud)
如果没有未正确转换的值的示例,则很难知道它的行为是否与您在描述中描述的cell.toString()方法有任何不同.
你的意思是HSSF-POI说
cell.getCellType() == Cell.CELL_TYPE_NUMERIC
不
Cell.CELL_TYPE_STRING 应该是什么?
我认为这是POI中的一个错误,但每个单元格都包含一个Variant,Variant有一个类型.在那里制作一个bug很难,所以我认为Excel使用一些额外的数据或启发式来将字段报告为文本.通常的MS方式,唉.
PS你不能getString()在包含数字的Variant上使用any ,因为Variant数据的二进制表示取决于它的类型,并且尝试从实际数字中获取字符串将导致垃圾 - 因此异常.
| 归档时间: |
|
| 查看次数: |
35762 次 |
| 最近记录: |