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;
        }
  • 相关阅读:
    从开发人员角度对软件测试的些许理解
    ObjectiveC的语法
    HttpModule与HttpHandler使用
    我为什么学习HASKELL?
    Linux下C语言编程环境Make命令和Makefile
    一个简单的验证框架
    程序员之路
    ObjectiveC语法之ObjectiveC语言和IOS系统(简介,语法,系统结构)
    Teamcity
    Python进阶 错误处理
  • 原文地址:https://www.cnblogs.com/interboy/p/837565.html
Copyright © 2011-2022 走看看