Java 将excel字符串读取为数字的POI
我正在使用ApachePOI读取excel文件。在阅读时,我注意到它将字符串作为浮点值 如果我的单元格包含1,则它将作为1.0获取它 我从前面的问题中得到了一些提示,并修改了代码,但浮点表示仍然保持原样 如何正确读取字符串和日期的数据Java 将excel字符串读取为数字的POI,java,excel,apache-poi,Java,Excel,Apache Poi,我正在使用ApachePOI读取excel文件。在阅读时,我注意到它将字符串作为浮点值 如果我的单元格包含1,则它将作为1.0获取它 我从前面的问题中得到了一些提示,并修改了代码,但浮点表示仍然保持原样 如何正确读取字符串和日期的数据 DataFormatter df = new DataFormatter(); for (Row row : sheet) { for(int cn=0; cn<row.getLastCellNum(); cn++
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());
}
}
}
DataFormatter df=newdataformatter();
用于(行:页){
对于(int cn=0;cn将评论升级为答案
问题在于电话
cell.setCellType(Cell.CELL_TYPE_STRING);
这样做是要求POI尝试将单元格从当前的任何内容(例如数字)转换为字符串。用于尝试这样做的转换相当简单,这就是为什么您会丢失格式
如果您只想返回一个包含Excel中显示的单元格值的字符串,只需直接调用DataFormatter
,它就会发挥最大的作用。摆弄单元格类型只会让事情变得混乱,并有可能失去格式设置添加到上述答案中,即使使用dataformatt,poi也会给您1.0作为输出er类,如果您试图对LIBRE OFFICE电子表格执行程序。因为poi与LIBRE电子表格的工作方式不同,与excel的工作方式不同。代码似乎正确…似乎是df.formatCellValue(cell))
是罪魁祸首…请对打印语句进行注释,然后再次检查。我认为问题在于cell.setCellType(cell.cell\u TYPE\u字符串)
不应该在那里。当您点击setCellType
行时,数据格式化程序是否正确?删除了setter。它工作正常。ThanksApache POI不适用于LibreOffice电子表格,使用需要使用来使用OpenOffice和LibreOffice生成的ODF电子表格。Apache POI适用于.xls
和.xlsx
仅Excel文件格式我们如何知道传入的xls或xlsx文件是在poi的Excel或libre office中创建的?如果文件是.xls
或.xlsx
格式,那么它就不是LibreOffice格式!LibreOffice和OpenOffice使用.ods
(打开文档电子表格)格式为其本机电子表格格式