无法读取整个标头;读取353个字节;预期的512字节

问题描述

在我的Android应用中,我从.xls和.xlsx格式的Excel工作表中导入输入数据。对于使用的样本数据,它运行良好。但是对于最终检查,当使用实际输入数据进行测试时,它会抛出以下错误

Error log: :java.io.IOException: Unable to read entire header; 353 bytes read; expected 512 bytes :Exception

我在SO中有答案,但是他们没有解释如何在Android环境中解决该情况。

编辑:

输入[.xls和.xlsx文件]由Oracle Form生成。必须将其导入Android。如果我在MS Excel中打开输入文件并保存。它被导入没有任何问题。但是我不能每次[使用MS Excel打开并保存]来做到这一点。

感谢帮助。

发现原因: ORACLE仅导出[.CSV]并另存为[.xls],这不是有效的excel工作表,当使用下面的Java代码读取时,会引发错误[仅适用于ORACLE导出的[.xls],而不是为Excel创建的[.xls]

try {
       if (resultCode == RESULT_OK) 
       {                        
            FileInputStream inStream;

            inStream = new FileInputStream(FilePath);
            Sheet sheet1 = null;

            if (GetFileExtension(FilePath).equals(".xls")) {

                // Workbook wb= new hssfWorkbook(inStream);
                // sheet1 = wb.getSheetAt(0);

                NPOIFSFileSystem fs = new NPOIFSFileSystem(inStream);
                Workbook wb = new hssfWorkbook(fs.getRoot(),true);

                sheet1 = wb.getSheetAt(0);

            }
            else if (GetFileExtension(FilePath).equals(".xlsx")) {
            
                    Workbook wb= new XSSFWorkbook(inStream);
                    sheet1 =  wb.getSheetAt(0);

        }
                 
.............
.............
.............

}
catch(Exception e){
       Toast.makeText(getApplicationContext(),""+e,Toast.LENGTH_LONG).show();
 }

经过一周的研究,我发现只有两种解决方

  1. ORA_EXCEL打包者2atOnce-付费
  2. Anton Scheffer提供的
  3. ASLX软件包-免费

引发错误的Apache POI代码

public HeaderBlock(InputStream stream) throws IOException {
        // Grab the first 512 bytes
       // (For 4096 sized blocks,the remaining 3584 bytes are zero)
        // Then,process the contents
        this(readFirst512(stream));
        
        // Fetch the rest of the block if needed
        if(bigBlockSize.getBigBlockSize() != 512) {
           int rest = bigBlockSize.getBigBlockSize() - 512;
           byte[] tmp = new byte[rest];
           IoUtils.readFully(stream,tmp);
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)