java.lang.ArrayIndexOutOfBoundsException从excel文件读取

java.lang.ArrayIndexOutOfBoundsException从excel文件读取,java,excel-2010,indexoutofboundsexception,jxl,Java,Excel 2010,Indexoutofboundsexception,Jxl,我试图从Excel表格中读取以下数据 使用以下代码 import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; public String readUsernameFromExcel() { File src = new File("C:/filepath.xls"); try { Workbook wb =

我试图从Excel表格中读取以下数据

使用以下代码

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

 public String readUsernameFromExcel() {
        File src = new File("C:/filepath.xls");

        try {

            Workbook wb = Workbook.getWorkbook(src);
            Sheet sh1 = wb.getSheet(0);
            Cell a2 = sh1.getCell(0, 2);
            data1 = a2.getContents().trim();


        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data1;

    }
因此,当我尝试获取单元格
0,1
时,我可以很好地获取用户名
1000483
。但是当我尝试读取
0,2
时,我得到
java.lang.ArrayIndexOutOfBoundsException:2

我试图做的是从excel工作表中读取数据,并将其作为
字符串返回,然后将其传递给登录我的应用程序。但当我尝试
0,2
时,我似乎超出了预期。我试过一些方法,比如for循环

 for (int rows = 0; rows < sh1.getRows(); rows++) {
 Sheet sh1 = wb.getSheet(0);
            Cell a2 = sh1.getCell(0, 2);

}
for(int rows=0;rows

我知道第一个数字是列,第二个是行。我也知道代码不能看到过去的
0,1
。在尝试了同一问题的其他解决方案之后,我不知道如何让它看到工作表的其余部分。

我与您使用相同的数据,我可以通过我的代码获得
1000484

这是我的密码:

package com.jason.xls;

import java.io.File;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class XlsParser {

    public static void main(String[] args) {
        final String path = "/home/coder/filepath.xls";
        System.out.println(readUserNameFromXls(path));
    }

    public static String readUserNameFromXls(final String path) {
        File file = new File(path);
        try {
            Workbook wb = Workbook.getWorkbook(file);
            Sheet sheet = wb.getSheet(0);
            Cell a2 = sheet.getCell(0, 2);
            return a2.getContents().trim();
        } catch (Exception e) {
            return null;
        }
      }
 }
我从

我的代码结果是:

sh1.getRows()
返回3。由于循环从0开始,
sh1.getRows()
需要递减1(如下所示)。下面的循环工作正常并正确返回值

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class Excel {

    public static void main(String[] args) {
        File src = new File("c:/filepath.xls");

        try {
            String data1;
            Workbook wb = Workbook.getWorkbook(src);
            Sheet sh1 = wb.getSheet(0);


            for (int rows = 1; rows < sh1.getRows(); rows++)  {
                for (int column = 0; column <= sh1.getColumns()-1; column++) {

                    Cell a2 = sh1.getCell(column, rows);
                    data1 = a2.getContents().trim();
                    System.out.println(data1);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        } 
    }



}
导入java.io.File;
导入java.io.IOException;
进口jxl.Cell;
进口jxl.Sheet;
导入jxl.工作簿;
公共类Excel{
公共静态void main(字符串[]args){
File src=新文件(“c:/filepath.xls”);
试一试{
字符串数据1;
工作簿wb=Workbook.getWorkbook(src);
表sh1=wb.getSheet(0);
for(int rows=1;rows对于(int column=0;column您确定它不是第一行然后是列吗?为什么您认为这是由于硒造成的???硒在这里的作用是什么?我认为它的第一列然后是行是我在另一个解决方案中读到的关于同一问题的公共单元格getCell(int column,int row)与selenium的唯一链接是当我访问页面并在读取单元格后传入变量时,因此问题可能不在于selenium,我将从中删除seleniumtitle@GianniB.so0,1拾取1000483,所以我假设0,2拾取1000484。我相信2是行,0是列。这很奇怪,我能找到的唯一区别是ee是您的方法返回null,我的方法返回字符串,但我仍然希望您的代码抱怨outofbounds异常。除非您的Excel有不同之处?为什么您不必捕获Biff异常?我修改代码并捕获BiffException和IOException,但我也得到了正确的答案,可能是我的xls file与您的不同?感谢您的代码,不幸的是,这仍然会给我一个异常。但是,当我将其更改为(行,1)时,它会给我1000483。当它失败时,对行的打印会给我2。它也不会是列,然后是行?查看它显示的getCell方法-公共单元格getCell(int column,int row);我已将循环修改为先列后行运行。但这取决于我们需要数据的方式。我猜在您的情况下,它应该返回用户名和密码,因此应该是先列后行。再次感谢:)-那么你是对的,当行=1,列=0时它工作。当我将行更改为2时,我不会将for循环输入为。getRows总是2。我想我的问题是。getRows总是返回2,我如何让它看到更多的工作表?所以看起来我只是很傻,我在电子表格中包含了更多的数据。你解决了我的问题,所以我我会把它标记为已解决。谢谢你的帮助!