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

Posted kemir_天明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
        }
    }

  

  

 

以上是关于jxl导出Excel中需要跳过的的坑的主要内容,如果未能解决你的问题,请参考以下文章

jxl导出Excel报内存溢出...

java中使用jxl导出Excel表格详细通用步骤

Java导出数据为EXCEL的两种方式JXL和POI

jxl导出excel时报错,求高手支招,在线等

poi导出excel

jxl导入/导出excel