0

尝试读取 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)

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

4

2 回答 2

2

您可以使用getRowsorgetColumns方法检查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);
于 2013-05-27T16:06:32.520 回答
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);
  }
}

这样,您可以安全地尝试读取一个单元格,如果它不包含任何内容,则将其丢弃。

我希望这就是你要找的。

于 2013-05-27T16:12:55.837 回答