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;
    }
原文地址:https://www.cnblogs.com/interboy/p/837565.html