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



最近遇到的一个问题,从系统中导出Excle后,修改excel的某些字段内容,然后再导入Excel,通过jxl读取Excel,出现jxl读文件异常

Java代码 复制代码  收藏代码
  1. jxl.read.biff.BiffException: Unable to recognize OLE stream      
  2.     at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)      
  3.     at jxl.read.biff.File.<init>(File.java:127)      
  4.     at jxl.Workbook.getWorkbook(Workbook.java:221)      
  5.     at jxl.Workbook.getWorkbook(Workbook.java:198)    

 说明导入的excel不是jxl认定的标准的OLE file,可是打开的看起来是Excle,然后我把这个Excel重新另存为一个Excel,发现他默认的保存类型是“单个文件网页”(通过EditPlus打开Excle可以看到是网页文件),然后把他保类型修改为Microsoft Office Excel,保存导入,就可以正确导入了。

另外一个可能的原因是:excel的版本问题

 

但是也可以不是通过另存为的方式,来进行导入。

 

1、读入Excel是按文本方式读入

2、导出Excel,按照符合jxl的方式导出

 

Java代码 复制代码  收藏代码
  1. public void outPutExcel(List<InvoiceRequisitionSo> result,HttpServletResponse response ){  
  2.     OutputStream os = null;  
  3.     try{  
  4.         os = response.getOutputStream();  
  5.     }catch (IOException el){  
  6.   
  7.     }  
  8.     response.reset();  
  9.     response.setHeader("Content-disposition""attachment; filename=InvoiceRequisitionListToExcel.xls");  
  10.     response.setContentType("application/msexcel");  
  11.     WritableWorkbook wwb=null;  
  12.     WritableSheet ws=null;  
  13.     WritableCellFormat cellFormat = new WritableCellFormat();  
  14.     WritableCellFormat cellFormatContent = new WritableCellFormat();  
  15.     WritableFont font= new WritableFont(WritableFont.createFont("宋体"),10, WritableFont.NO_BOLD);  
  16.     WritableFont font1= new WritableFont(WritableFont.createFont("宋体"),10, WritableFont.NO_BOLD);  
  17.     try{  
  18.        wwb = Workbook.createWorkbook(os);  
  19.        ws = wwb.createSheet("总部发票申请"0);  
  20.        font.setColour(Colour.WHITE);  
  21.        WritableCellFormat cellFormatContentt = new WritableCellFormat(font);  
  22.        font1.setColour(Colour.RED);  
  23.        WritableCellFormat cellFormatContentred = new WritableCellFormat(font1);  
  24.        ws.getSettings().setDefaultColumnWidth(18);  
  25.        //设置单元格格式  
  26.      cellFormat.setBackground(Colour.GRAY_25);  
  27.        cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);  
  28.        cellFormatContent.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);  
  29.        cellFormatContentt.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);  
  30.        int i = 0;  
  31.        for (InvoiceRequisitionSo so : result) {  
  32.              ws.addCell(new Label(0,i,so.getInvoice(),cellFormatContentred ));  
  33.               //合并单元格  
  34.          ws.mergeCells(1, i , 2, i );  
  35.               ws.addCell(new Label(1, i, so.getEno(), cellFormatContent));  
  36.               i++;  
  37.       }  
  38.     }catch (Exception e){  
  39.   
  40.     } finally{  
  41.             try {  
  42.                 wwb.write();  
  43.                 wwb.close();  
  44.                 os.close();  
  45.             } catch (Exception e) {  
  46.   
  47.             }  
  48.         }  
  49. }  

你可能感兴趣的:(Excel,异常)