2

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

我的代码:

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 列)的每个单元格中都写了相同的值,但问题仍然相同。

什么可能导致这个问题?

4

3 回答 3

0

确保为列中的所有单元格设置相同的日期格式(选择列并明确设置格式)而且我相信使用DataUtil 类获取数据比调用更合适cell.getDateCellValue()

于 2012-10-15T10:53:51.647 回答
0

POI 使用基于 0 的列计数。所以,如果你想要第 9 列,你需要获取索引为 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
}
于 2012-10-15T13:16:18.173 回答
0

似乎是 excel 文档的问题。

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

于 2012-11-02T11:11:44.770 回答