jxl导入Excel报jxl.read.biff.BiffException: Unable to recognize OLE stream

昨天用jsp,拼接了一个excel,通过response 以流的方式返回,以便打开和下载,(jsp如下)
<%     response.addHeader("Content-Disposition", "attachment; filename=" +new String(("文书档案.xls").getBytes(), "ISO-8859-1"));
    response.setContentType("application/msexcel");
    response.setHeader("Cache-Control", "");
    response.setCharacterEncoding("gbk");
%>
<table>
<tr><td></td></tr>
<tr><td></td></tr>
</table>


保存后,想用jxl导入到系统中,但是总是报错:
jxl.read.biff.BiffException: Unable to recognize OLE stream
at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
at jxl.read.biff.File.<init>(File.java:127)
at jxl.Workbook.getWorkbook(Workbook.java:268)
at jxl.Workbook.getWorkbook(Workbook.java:253)
at Test201309.Test20131008.main(Test20131008.java:197)


网上查了原因:以jsp通过自己拼接的excel,其实是把页面的内容以excel的格式显示了而已,本身还是“网页”或者“单个文件网”
格式,并不是Microsoft 标准的Excel格式。
解决办法:1、打开文件,然后另存为“Microsoft Office Excel 工作簿(*.xls)”格式,然后再导入。
2、通过代码修改(写一个方法传入HttpServletResponse参数),将response的输出流的内容变为标准的excel格式数据:
public xxmethod(HttpServletResponse response){
try {
// outputstream
OutputStream os = response.getOutputStream();

// response
response.addHeader("Content-Disposition", "attachment; filename=" +new String(("文书档案.xls").getBytes(), "ISO-8859-1"));
    response.setContentType("application/msexcel");
    response.setHeader("Cache-Control", "");
    response.setCharacterEncoding("gbk");
    // 创建工作簿book
WritableWorkbook book = Workbook.createWorkbook(os);
WritableSheet sheet = book.createSheet("文书档案 "+DateUtil.getCurrent(), 0);
// 标题
Label label = null;
String[] titles = new String[]{"分类号","档号","档案馆代号","组织机构代码","电子文档号","缩微号","题名","文号","责任者",
"稿本","文种","密级","保管期限","成文日期","载体规格","载体类型","载体数量","载体单位",
"主题词","全文标识","主办部门","协办部门","备注","归档年度","全宗号","件号","机构问题"};

for(int i = 0;i<27;i++){
label = new Label(i,0,titles[i]);
sheet.addCell(label);
}
// 添加具体数据
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值