• 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();
            }
        }

      

      

  • 相关阅读:
    show-meeting-subject-in-meeting-room-calendar
    前端模块化——彻底搞懂AMD、CMD、ESM和CommonJS
    微软到底有多恐怖?
    Office365云流程与开发授权错误
    JQuery实现省市联动 address-picker
    我的新作品 《平虏灭寇英杰传》
    ZT:C/C++ 字符串与数字相互转换
    C016:字符串倒置
    C015:十进制转8进制
    C014:不用算术分割显示逆序三位数
  • 原文地址:https://www.cnblogs.com/kemir1105/p/7605992.html
Copyright © 2020-2023  润新知