zoukankan      html  css  js  c++  java
  • POI操作Excel的怪异问题

    这两天用POI生成Excel,看了看头儿给的例子就动手开始写,写的还算顺利,数据可以导出到Excel中了,而接下来的布局就很麻烦了,所有的

    操作都需要用程序来控制,写了一会我觉得这样不行,应该弄一个模板,于是我把Excel的格式提取出来,放到一个新的Excel文件中,每次都

    打开这个模板文件,从这个模板文件里边插入数据,只是在保存的时候把数据保存到另外一个Excel文件中,这样就可以省去了不少布局的麻烦

    。当然这也存在些问题:
    如果有多个sheet怎么办?答:如果需要多个sheet可以在模板中多创建几个模板sheet。
    如果我创建的好多模板sheet但是有用不了那么多呢?答:可以在保存之前把多于的sheet删除掉。
    上面两个问题都解决了,按说应该是没有问题了,但是新的问题出现了,excel可以生成,但是打开后sheet不能切换,一切换就报错。查了半

    天不知是什么原因,找头儿给我看,他看了会跟我说代码没有问题,问题是Excel模板必须把最后添加的sheet设置成选中状态,不能是别的

    sheet。比如你有从sheet1到sheet9这九个sheet所以你就要把sheet9设置成选中然后保存。这样根据模板到处的excle才没有问题。

    public static void createExcelFromTemplate(String templateFile, String saveFile, ArrayList excelData)
    {
        
    // 读取模板Excel
        HSSFWorkbook tempWorkBook = new HSSFWorkbook(new FileInputStream(templateFile));

        
    //处理excel
        
    //

        tempWorkBook 
    = deleteSheet(tempWorkBook);
        
    //保存Excel
        generateExcel(tempWorkBook, saveFile);
    }

        
    /*由HSSFWorkbook生成Excel文档
       *
       * 
    */

        
    public static void generateExcel(HSSFWorkbook wb, String saveFile) {
            
    try {// 新建一输出文件流
                FileOutputStream fOut = new FileOutputStream(saveFile);
                
    // 把相应的Excel 工作簿存盘
                wb.write(fOut);
                fOut.flush();
                
    // 操作结束,关闭文件
                fOut.close();
            }
     catch (Exception e) {
                e.printStackTrace();  
    //To change body of catch statement use File | Settings | File Templates.
            }

        }


        
    //删除多于的Sheet
        public static HSSFWorkbook deleteSheet(HSSFWorkbook wb)    {
            
            
    int totalSheets = wb.getNumberOfSheets() - 1;
            
    while (0 <= totalSheets) {
                
    if (wb.getSheetName(totalSheets).lastIndexOf("Sheet"== 0{
                    wb.removeSheetAt(totalSheets);
                    totalSheets
    --;
                }
     else {
                    totalSheets
    --;
                }

            }

           
    return wb;
        }
  • 相关阅读:
    如何使标签a处于不可用状态
    document.referrer的使用和window.opener 跟 window.parent 的区别
    纯CSS让overflow:auto页面滚动条出现时不跳动
    闭包的使用实例
    VMware workstation使用小技巧
    个人命令简记
    中国剩余定理
    UVA 10603 倒水问题
    Haybale Stacking(差分数组 + 求中位数的一些方法 + nth_element)
    POJ 1511 Invitation Cards (最短路的两种方法spfa, Dij)
  • 原文地址:https://www.cnblogs.com/interboy/p/837565.html
Copyright © 2011-2022 走看看