jxl导出Excel中需要跳过的的坑

  正如上篇文章(JXL封装不能使用static关键字问题)所说,在jxl导出Excel时候如果频繁使用到WritableCellFormat去设置单元格的样式,这个时候经常会出现两种情况:

    1、报警告:Warning:  Maximum number of format records exceeded.  Using default format.虽然说程序员一般不看警告,but这个警告讨厌了,他会把你超过限制的格式恢复成默认格式。所以必须解决。

    2、报异常:java.lang.ArrayIndexOutOfBoundsException: 164  

  两者出现的场景就不细说了,说说解决方案,直接上代码:

public class OperateExcelUtils {
    private static WritableCellFormat normalFormat = null;

        //样式做单例
    private static WritableCellFormat getNormalFormat() throws WriteException{
        if(normalFormat==null){
            normalFormat = new WritableCellFormat();//一般样式
            normalFormat.setAlignment(jxl.format.Alignment.CENTRE);// 内容居中(水平+垂直)
            normalFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            normalFormat.setBorder(jxl.format.Border.ALL,
                    jxl.format.BorderLineStyle.THIN);// 边框
            normalFormat.setLocked(true);
            return normalFormat;
        } else {
            return normalFormat;
        }
    } 
}

  如果只做上述处理,多次导出就会出现问题2了,如下处理:

   /**
     * 清除所有样式(workbook操作完成调用)
     */
    public static void clearStaticFormat(){
        normalFormat = null;
        
    }    

        //主方法
        public static void main(String[] args) {
        try {
            OutputStream os = new FileOutputStream("E:\\exp.xls");
            WritableWorkbook workbook = Workbook.createWorkbook(os);
            WritableSheet sheet = workbook.createSheet("sheet",0);
            
            sheet.addCell(new Label(0, 0, "111", normalFormat));
            sheet.getSettings().setProtected(true);
             workbook.write();
             clearStaticFormat(); //workbook操作完成调用
             workbook.close(); 
             os.close();
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

  

  

 

posted @ 2017-09-28 11:44  kemir_天明  阅读(324)  评论(0编辑  收藏  举报