POI说单元格是空的,但单元格有一个值

我正在使用POI在Java应用程序中打开一个Excel(xls)文件。 这Excelfile有30行。 我需要在ColumnIndex 9处获取Value。

我的代码:

Workbook wb; wb = WorkbookFactory.create(inp); Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { if (row.getLastCellNum() >= 6) { for (Cell cell : row) { if(cell.getColumnIndex == 9) { //do something } } } } 

Excel中的每一行在第1-14列中都有值。 我的问题是,只有一些值被认可。 我在ColumnIndex 9(我的Excel工作表中的第10列)的每个单元格中都写了相同的值,但问题仍然是相同的。

什么可能导致这个问题?

确保你为列中的所有单元格设置相同的date格式(select列和设置格式显式)而我相信使用DataUtil类来获取数据更合适,比调用cell.getDateCellValue()

POI对列使用基于0的计数。 所以,如果你想要第九列,你需要获取索引8,而不是9的单元格。它看起来像检查索引9的列,所以是一列。

如果您不确定基于0的索引,最安全的是使用CellReference类来帮助您。 这将在Excel样式引用(例如A1)和基于POI样式0的偏移(例如0,0)之间转换。 使用类似于:

 CellReference ref = new CellReference("I10"); Row r = sheet.getRow(ref.getRow()); if (r == null) { // That row is empty } else { Cell c = r.getCell(ref.getCol()); // c is now the cell at I10 } 

似乎是与Excel文档(S)的问题。

将它们转换为csv,然后再转换为xls可以解决这个问题。