zoukankan      html  css  js  c++  java
  • 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();
            }
        }

      

      

  • 相关阅读:
    Codeforces Round #592 (Div. 2)C. The Football Season(暴力,循环节)
    Educational Codeforces Round 72 (Rated for Div. 2)D. Coloring Edges(想法)
    扩展KMP
    poj 1699 Best Sequence(dfs)
    KMP(思路分析)
    poj 1950 Dessert(dfs)
    poj 3278 Catch That Cow(BFS)
    素数环(回溯)
    sort与qsort
    poj 1952 buy low buy lower(DP)
  • 原文地址:https://www.cnblogs.com/kemir1105/p/7605992.html
Copyright © 2011-2022 走看看