问题描述
在我的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();
}
经过一周的研究,我发现只有两种解决方案
- ORA_EXCEL打包者2atOnce-付费 由Anton Scheffer提供的
- ASLX软件包-免费
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 (将#修改为@)