先谢了。代码情况:java读excel文件,使用poi,异常出在第二行代码。 FileInputStream fin=new FileInputStream(filename);
POIFSFileSystem fs = new POIFSFileSystem(fin);异常描述:Unable to read entire block; 136 bytes read; expected 512 bytes我想知道,产生这种异常的原因是什么?
另外有一个奇怪的现象,如果在运行此段代码前,先把出异常excel文件用excel打开一遍再关掉,代码就可以正常运行,这是为什么呢?请各位帮帮忙,谢谢。

解决方案 »

  1.   

    这个应该是excel的文档结构中有什么符号或者格式有问题,在进行文件流读取的时候不能读取档案,当你用excel打开以后,格式被excel强行修订了。
    确认要点:
    在用excel打开的时候有没有提示你保存或者已经修订了过内容?
    截取部分excel档案的内容再进行操作(排除法确认在什么位置出现的错误)!
    您所使用的excel档案是由什么生成的,软件的版本与你打开使用的是否相同?
    以上各点,自己仔细对照。找出问题点!
      

  2.   

    谢谢楼上:// 在用excel打开的时候有没有提示你保存或者已经修订了过内容?
    没有任何提示,正常打开。原excel文件版本不清楚,我用excel 2k打开的。// 您所使用的excel档案是由什么生成的,软件的版本与你打开使用的是否相同?
    也是由程序生成的。是组合式的报表,12份,只有4份会出现这个异常。生成的版本无法确认了,那是老系统遗留的。觉得不像版本的问题,因为报表格式一样的,却只有部分文件出异常。// 截取部分excel档案的内容再进行操作(排除法确认在什么位置出现的错误)!
    试一试,谢谢。
      

  3.   

    真是郁闷,这问题没能搞定。如你所说,估计是“excel的文档结构中有什么符号或者格式有问题”。如今读异常的文件已增至8个,原因是对excel文件重命名(不是打开另存,仅仅是重命名)。另外,发现有读异常的文件在用excel打开后文件大小都会变化(比原来大了0.6kb左右)。老系统的东东果然够狠。