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;
        }
  • 相关阅读:
    例题6-8 Tree Uva548
    例题6-7 Trees on the level ,Uva122
    caffe Mac 安装
    Codeforces Round #467 (Div. 1) B. Sleepy Game
    Educational Codeforces Round37 E
    Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons
    Good Bye 2017 E. New Year and Entity Enumeration
    Good Bye 2017 D. New Year and Arbitrary Arrangement
    Codeforces Round #454 D. Seating of Students
    浙大紫金港两日游
  • 原文地址:https://www.cnblogs.com/interboy/p/837565.html
Copyright © 2011-2022 走看看