从Excel文件中读取空单元格时出现异常

时间:2013-05-27 15:28:10

标签: java excel exception cell jxl

当尝试阅读Excel工作表时,如果某个单元格为空,我会收到异常:

Cell[] rowCells = sheet.getRow(1);

Cell cell = sheet.getCell(0,1);

我总是得到同样的信息:

java.lang.ArrayIndexOutOfBoundsException: 1
    at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:356)
    at gui.ReadExcel.read(ReadExcel.java:45)
    at gui.GUIcontroller.chooseSaveFile(GUIcontroller.java:101)

有什么问题?我怎么知道单元格是否为空,所以我不会复制它的值?

2 个答案:

答案 0 :(得分:2)

您可以使用getRowsgetColumns方法检查sheet的范围。出现ArrayIndexOutOfBoundsException是因为您正在尝试访问一个值,该值超出了最远的单元格非空的范围。

int rows = sheet.getRows();
int columns = sheet.getColumns();
int i = 1;
if(i<rows)
    Cell[] rowCells = sheet.getRow(i);  //Won't throw an Exception

if(i<rows && j<columns)
    Cell cell = sheet.getCell(i,j);

答案 1 :(得分:0)

在这种情况下,您无法读取单元格,因为就jxl而言,它实际上并不存在于电子表格中。它还没有创建,所以真的没有细胞可以获得。这可能听起来很奇怪,因为excel表继续看起来像是永远的,虽然它不存储所有这些空单元的数据,因为文件大小会很大。所以当jxl去读取数据时,它只会告诉你那里什么都没有。

如果您想要阅读单元格,并且所有单元格都组合在一起,那么您可以尝试:

int width = sheet.getColumns();
int height = sheet.getRows();

List<Cell> cells = new ArrayList<Cell>();

for(int i=0; i<width; i++){
 for(int j=0; j<height; j++){
  cells.add(sheet.getCell(i, j));
 }
}

如果它们没有组合在一起并且您不确定哪些单元格可能为空,那么仍然有一个相当简单的解决方案

List<Cell> cells = new ArrayList<Cell>();
Cell cell = null;
try{
  cell = sheet.getCell(0, 1);
}catch(Exception e){
  e.printStackTrace();
}finally{
  if(cell != null){
    cells.add(cell);
  }
}

通过这种方式,您可以安全地尝试读取单元格,如果它不包含任何内容,则将其丢弃。

我希望这就是你要找的东西。