0
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class SpreadsheetRead {
    /**
     * @param args
     * @throws IOException 
     * @throws BiffException 
     */
    public static void main(String[] args) throws BiffException, IOException {
        // TODO Auto-generated method stub
        Workbook workbook = Workbook.getWorkbook(new File("Book1.xls"));
        Sheet sheet = workbook.getSheet(0);

        Cell name = sheet.getCell(0, 0);
        Cell name1 = sheet.getCell(1, 0);
        try {
            Cell name2 = sheet.getCell(2, 0);
            Cell name3 = sheet.getCell(3, 0);
        }catch (Exception e){
            e.printStackTrace();
        }

        Cell value = sheet.getCell(0, 1);
        Cell value1 = sheet.getCell(1, 1);
        Cell value2 = sheet.getCell(2, 1);
        Cell value3 = sheet.getCell(3, 1);

        System.out.println(sheet.getRows());
        System.out.println(sheet.getColumns());
        System.out.println(name.getContents());
        System.out.println(name1.getContents());
        System.out.println(value.getContents());
        System.out.println(value1.getContents());
    }
}

Excel 工作表内容 (Book1.xls) ... 它包含 4 行和 2 列,如下所述。

名称 值
1
乙二
C 3

此代码适用于单元格 [(0,0),(0,1),(1,0) & (1,1)] 以及其他单元格,它给出 ArrayIndexOutOfBoundException ... 请帮助

堆栈跟踪

java.lang.ArrayIndexOutOfBoundsException:2
4
2
姓名
价值
一个
    在 jxl.read.biff.SheetImpl.getCell(SheetImpl.java:356)
    在 SpreadsheetRead.main(SpreadsheetRead.java:25)
1
4

1 回答 1

0

控制台输出有点纠结;记录的数据System.err与记录的数据重叠System.out

java.lang.ArrayIndexOutOfBoundsException: 2
4
2
Name
Value
A
    at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:356)
    at SpreadsheetRead.main(SpreadsheetRead.java:25)
1

让我们解开这些,并将它们与各自的日志调用相匹配:

错误日志:

java.lang.ArrayIndexOutOfBoundsException: 2
    at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:356)
    at SpreadsheetRead.main(SpreadsheetRead.java:25)

第 25 行是我尝试访问 Cell (2,0) 的位置

这表明 Cell(2,0) 不在表中。

让我们看一下 System.out 日志。

他们也失败了,只是我在执行这段代码时评论了这些行。

我假设您的意思是访问第 1 列和相应的日志记录调用。

Cell name = sheet.getCell(0, 0);
Cell name1 = sheet.getCell(1, 0);
Cell value = sheet.getCell(0, 1);
Cell value1 = sheet.getCell(1, 1);

System.out.println(sheet.getRows());      //4
System.out.println(sheet.getColumns());   //2
System.out.println(name.getContents());   //Name
System.out.println(name1.getContents());  //Value
System.out.println(value.getContents());  //A
System.out.println(value1.getContents()); //1

将此与表格进行比较:

Name Value
A    1
B    2
C    3

表示第一个参数是列索引,而不是您似乎期望的行索引。

Sheet#getCell文档证实了这一点:

public Cell getCell(int column,
                    int row)
于 2013-08-16T15:07:47.327 回答