import java.io.FileInputStream;
import java.io.InputStream;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;public class TestExcel {
public static void readExcel(String sourcefile){
try
{
InputStream is = new FileInputStream(sourcefile);
jxl.Workbook rwb = Workbook.getWorkbook(is);
Sheet rs = rwb.getSheet(0);
Cell c = rs.getCell(1,1);
String strc = c.getContents();
System.out.println("Cell(0, 0)" + " value : " + strc + "; type : " + c.getType());
}catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args){
TestExcel.readExcel("D:\\d.xls");
}
}
这个代码应该是没问题的,用来读取b.xls文件的cell(0,0)中的值,但是有这样奇怪的问题,有一种excel表读不了,报错:
java.lang.ArrayIndexOutOfBoundsException: 1
at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:354)
at TestExcel.readExcel(TestExcel.java:14)
at TestExcel.main(TestExcel.java:23)
但是我在这个表中任意cell里面写一个值就可以了,我再把这个值删了,也可以读取,这是 什么原因呢???
后来 我又尝试让它读一个新建立的新表,也是同样的报错,再用相同的办法,增加一个cell值,又可以读了,再删除这个cell值,也可以读。
(我用的是2.6版本的java excel api)
这个问题 折磨我好几天了,大家帮帮我吧!!!!!

解决方案 »

  1.   

    你这是硬读,自然很容易会出现这样的异常。应该先判断它有多少行,多少列再读就不会出现越界的异常了。
    rs.getRows()
    rs.getColumns(); 
      

  2.   

    我觉得问题不在这个,郁闷的是执行rs.getRows() 就 已经报错了java.lang.ArrayIndexOutOfBoundsException: 2
    所以 我觉得才很郁闷啊 这是什么原因呢????
      

  3.   

    Sheet rs = rwb.getSheet(0);是这句报错,问题是我只要用打开这个excel,向里面随便加点内容,再读取就不报错,然后你再把刚才增加的内容删了,就是和以前一样了,这个时候也能读取,这到底是什么原因呢????
      

  4.   

    老大,关键里面是有内容啊。我刚才有用poi试了一下也不行 也是报错,但是用excel将它打开后,再点击保存退出,就又可以读了,我现在怀疑是不是那个excel文件的版本的原因啊。要不太高,要不太低,用我excel2003生成的文件,怎么读都没错啊,大家帮帮我啊
      

  5.   

    又发现一个问题,我的那些excel是中国移动给我的,也是他们的程序生成的,我用excel2003打开这些excel文件,什么也不操作,直接保存。发现excel文件会大几k,这时我就能用程序读了,是不是那些文件本身的问题啊。
      

  6.   

    Cell c = rs.getCell(1,1);如果Excel是空的,那么这个0,0位置也是不存在的,你去读取,当然报异常了!你应该判断一下列的数量,好象是 getColumns()之类的调用,如果大于0,你再读取!
      

  7.   

    应该判读有几行几列,之后在取值,这样才安全。除非那个Cell一定有值
      

  8.   

    哎呀 我知道啊,我都已经说了 不是那个的问题,我当然知道要判断一下数量,可是现在不那个问题报错,执行到Sheet rs = rwb.getSheet(0);时就已经报错了,喝后面的都没关系了,里面有内容。java2000_net ,goldlive_8888 两位老大 你看看我前面的解释没有啊,请高手帮忙。
      

  9.   

    jxl操作excel,如果你是直接读取硬盘上的文件,
    你之前要有进行过操作的cell,jxl才会承认该cell的存在
    也就是说你要先打开excel,在里面用鼠标点击了cell(x,y),
    jxl才会承认cell(x,y)是可编辑的,否则就抱错,
    直接在内存用createWorkbook()新建一个workbook就没有这个限制
      

  10.   

    能说的详细点么????但是我发现就这些中国移动给我的excel文件不能读,我自己建立的excel文件读写都没有问题啊???这是怎么回事呢???
    新建createWorkbook()然后怎么操作呢???怎么读那些excel文件,真的是麻烦大家了。
      

  11.   

    我现在出现的现象和你出现的现象一样,不知道你解决了吗?我也郁闷了好长时间了。我读的也是中国移动excel文件。有的可以。有的不可以。找不到原因。
      

  12.   

    如果是用 excel2007 建的文件的就不能用pio读,估计jxl也不行.
    不晓得是否是这个情况.
      

  13.   

    遇到相同的错误,我的问题错误原因如下:
    rwb.getSheet(0);要读的是第一个工作表
    打开excel 看起来第一个工作表就是要读的文件
    但是用2007查看该excel表的源代码,发现自己这个工作表前面隐藏了一个表,
    没有任务。
    结果用
    rwb.getSheet(1);就读出了想要的内容……我分享,我奉献,我自豪