当尝试阅读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)
有什么问题?我怎么知道单元格是否为空,所以我不会复制它的值?
答案 0 :(得分:2)
您可以使用getRows
或getColumns
方法检查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);
}
}
通过这种方式,您可以安全地尝试读取单元格,如果它不包含任何内容,则将其丢弃。
我希望这就是你要找的东西。