用jxl读取多sheet的excel文件时出现错误,如果只读取第一个sheet可以读取,但读取第二个sheet便出现错误。
如果将excel文件找开重新保存或者复制出去,则可以正常读取,请高人解答。
代码如下:
import jxl.Sheet;
import java.io.InputStream;
import java.util.Vector;
import java.io.FileInputStream;
import jxl.Workbook;public class test2 {
    public static void main(String [] args){
     ReadExcel("e:\\test\\test3.xls");
    }
    public test2() {
    }
    /*
* 方法名:ReadExcel
* 参数:filePath为Execl文件的绝对路径
* 用途:读取Execl数据,放在数组中返回
*返回类型:Vector
*
* */
public static Vector ReadExcel(String filePath)
{
Vector v = new Vector();
Workbook rwb = null;
try
{
 InputStream is = new FileInputStream(filePath);
 rwb = Workbook.getWorkbook(is);
 // 获取第一张Sheet表
 Sheet rs = rwb.getSheet(1);
 for (int k = 0; k < rs.getRows(); k++)
 {
 for (int j = 0; j < rs.getColumns(); j++)
 {
 System.out.println(rs.getCell(j, k).getContents());
 v.add(rs.getCell(j, k).getContents());
 }
 }
 rwb.close();
}
catch (Exception e)
{
 e.printStackTrace();
}
return v;
}
}出现的错误如下:
java.lang.IndexOutOfBoundsException: Index: 23, Size: 23
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at jxl.biff.FormattingRecords.getNumberFormat(FormattingRecords.java:244)
at jxl.read.biff.NumberRecord.<init>(NumberRecord.java:73)
at jxl.read.biff.SheetReader.read(SheetReader.java:496)
at jxl.read.biff.SheetImpl.readSheet(SheetImpl.java:716)
at jxl.read.biff.WorkbookParser.getSheet(WorkbookParser.java:257)
at test2.ReadExcel(test2.java:29)
at test2.main(test2.java:9)

解决方案 »

  1.   

    没看到读取第二个sheet的代码估计是没有切换到第二个sheet,或是行/列取反了之类的
      

  2.   

    Sheet rs = rwb.getSheet(1); 这个就是读取sheet的代码,如果是0就是读的第一个,这里是1就应该读的是第二个。
      

  3.   

    那看看,第二个Sheet 的行和列是不是有什么特殊的地方,例如合并的单元格,可能有影响
      

  4.   

    经跟踪调试发现是getsheet()时遇到number类型的单元格就抛出异常了,有遇到过类似问题的吗?
    只要把文件打开,,什么也不做,只要点击保存,再读取就没有问题了,现在问题是不做任何操作,怎么能够顺利读取呢?
      

  5.   

    经跟踪调试发现是getsheet()时遇到number类型的单元格就抛出异常了,有遇到过类似问题的吗?
    只要把文件打开,,什么也不做,只要点击保存,再读取就没有问题了,现在问题是不做任何操作,怎么能够顺利读取呢?
      

  6.   

    经跟踪调试发现是getsheet()时遇到number类型的单元格就抛出异常了,有遇到过类似问题的吗?
    只要把文件打开,,什么也不做,只要点击保存,再读取就没有问题了,现在问题是不做任何操作,怎么能够顺利读取呢?
      

  7.   

    try   {
                Workbook book  =  Workbook.getWorkbook(new File("c:\\aaaaaa.xls"));
                 //  获得第一个工作表对象
                Sheet sheet  =  book.getSheet(0);
                 //  得到第一列第一行的单元格
                Demo1 d1 = new Demo1();
                for(int i=1;i<131;i++){
                 Cell cell1  =  sheet.getCell(3,i);
                 Cell cell2  =  sheet.getCell(5,i);
                 Cell cell3  =  sheet.getCell(7,i);
                 Cell cell4  =  sheet.getCell(0,i);
                 Cell cell5  =  sheet.getCell(1,i);
                    String cell1_1  =  cell1.getContents().trim();
                    String cell2_1  =  cell2.getContents().trim();
                    String cell5_1  =  cell5.getContents().trim();
                    String cell3_1 = null;
                    cell3_1  =  cell3.getContents().trim();
                    String cell4_1  =  cell4.getContents().trim();
                    d1.gets(cell4_1,cell5_1,cell1_1,cell2_1,cell3_1);
                    System.out.println(cell1_1.length());
     //               System.out.println(cell4_1 + "::" +cell1_1 + "::" + cell2_1 + "::" + cell3_1);
                }
                book.close();
            }   catch  (Exception e)  {
                System.out.println(e);
            } 
    }
      

  8.   


    for (int k = 0; k < rs.getRows(); k++)
    {
    for (int j = 0; j < rs.getColumns(); j++)
    {
    System.out.println(rs.getCell(j, k).getContents());
    v.add(rs.getCell(j, k).getContents());
    }

    我感觉你的错误应该出现在这个地方,Excel中的行和列如果存在空列,你使用rs.getColumns(),这样会吧空列一并计算到里面去,而Excel中其实并没有这么多的列数,所以,才会报数组越界的错误,很简单的处理方法就是,将Excel中的sheet中的数据区域复制到新的Excel中就可以了
      

  9.   

    报错已经提示你了 是下表越界 错误在at test2.ReadExcel(test2.java:29)  29行