jxl读取excel文件异常:Unable to recognize OLE stream 的解决方法
jxl只支持97到03版本的xls,在电脑上另保存一份xls再放到Android的assets目录下,写excel的时候把这个模板拷到内存下。
Android使用Jxl对excel追加写入
try {
File file;
File dir = new File("/storage/emulated/0/TempRecord/");
file = new File(dir, fileName);
if (!dir.exists()) {
dir.mkdirs();
}
// 创建Excel工作表
WritableWorkbook wwb = null;
Workbook wb = null;
FileInputStream inputStream = null;
if (!file.exists() || file.length() == 0) {
file = copyAssetFile(context);
//
// file.createNewFile();
wwb = Workbook.createWorkbook(file);
} else {
inputStream = new FileInputStream(file);
wb = Workbook.getWorkbook(inputStream); //文件长度必须大于0,不然会报错。追加写入,通过firstSheet.getRows();获取有多少行,再在后面进行追加。
wwb = Workbook.createWorkbook(file, wb);
}
if (wwb == null) {
Log.i(TAG, "writeExcel: wb == null ");
return;
}
if (wwb.getNumberOfSheets() > 0) {
WritableSheet firstSheet = wwb.getSheet(0);
firstSheet.setName("温湿度传感器记录");
Label timeLabel = new Label(0, 0, "时间", getHeader());
firstSheet.addCell(timeLabel);
firstSheet.mergeCells(0,0,0,1);
firstSheet.setColumnView(0, 30);
for (int i = 1; i <= title.length * 2; i = i + 2) {
// Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z
// 在Label对象的子对象中指明单元格的位置和内容
Label label = new Label(i, 1, "温度(T)", getHeader());
Label label1 = new Label(i + 1, 1, "湿度(%)", getHeader());
// 将定义好的单元格添加到工作表中
firstSheet.addCell(label);
firstSheet.addCell(label1);
// Label titleLabel = new Label(i, 0, title[i], getHeader());
// firstSheet.addCell(titleLabel);
firstSheet.mergeCells(i, 0, i + 1, 0);
}
for (int i = 0; i < title.length; i++) {
// Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z
// 在Label对象的子对象中指明单元格的位置和内容
Label label = new Label((i + 1) * 2 - 1, 0, title[i], getHeader());
// 将定义好的单元格添加到工作表中
firstSheet.addCell(label);
}
}
// 写入数据
// 关闭文件
wwb.write();
wwb.close();
wb.close();
inputStream.close();
} catch (Exception e) {
}
|