我正在使用Apache POI来读取excel文件。在阅读它时,我注意到它将字符串作为浮点值。
如果我的单元格包含1,那么它将获取为1.0
我从此前的问题中提取了一些提示并修改了代码,但浮动表示仍然保持不变。
我如何正确读取字符串和日期的数据?
DataFormatter df = new DataFormatter();
for (Row row : sheet) {
for(int cn=0; cn<row.getLastCellNum(); cn++) {
// If the cell is missing from the file, generate a blank one
// (Works by specifying a MissingCellPolicy)
Cell cell = row.getCell(cn, Row.CREATE_NULL_AS_BLANK);
// Print the cell for debugging
cell.setCellType(Cell.CELL_TYPE_STRING);
System.out.println("CELL: " + cn + " --> " + df.formatCellValue(cell));
if (row.getRowNum() == 0) {
sheetColumnNames.add(cell.getRichStringCellValue().getString());
}
}
}
答案 0 :(得分:1)
宣传对答案的评论
问题是电话
cell.setCellType(Cell.CELL_TYPE_STRING);
正在做的是要求POI尝试将单元格从当前的任何单元格(例如数字)转换为字符串。尝试执行此操作的转换非常简单,这就是您丢失格式
的原因如果您只想获取一个包含Excel中显示的Cell Value的String,只需直接调用DataFormatter
,它就会尽力而为。使用“细胞类型”只会混淆事物,并且可能会失去格式化
答案 1 :(得分:0)
如果您尝试针对LIBRE OFFICE电子表格执行程序,即使您使用的是dataformatter类,poi也会为您提供1.0作为输出。因为poi不像LIBRE SPREADSHEET那样以与excel相似的方式工作。