C# 使用NPOI 根据多Sheet Excel模板导出数据

这是我博客园的第一篇文章,参考了很多大神的文章,获益匪浅。

因此也想开始动手写博客,一来可以总结学到的只是,二来可以帮到别人。

菜鸟级别,诚惶诚恐。

正文开始:

这几天在开发WinForm项目,里面有大量的计算数据需要导出,便于查看。方法介绍:http://www.cnblogs.com/springyangwc/archive/2011/08/12/2136498.html

在使用NPOI 根据已有模板导出Excel时,第一个Sheet(sheet1)中能写入数据,在向后面的Sheet(sheet2,sheet3...)内写入数据时,比如第5行、第6列,会报错 “未将对象引用设置到对象的实例”,原因是sheet2 中Cell都是“NULL”值;

解决方法1:新建Cell

 

1     string SavePathString = "H:\\Desktop\\Resources\\ExcelTemplate_CCVarSimulation_EN.xls";
2     FileStream file = new FileStream(SavePathString, FileMode.Open,         FileAccess.Read);
3     HSSFWorkbook hwbook = new HSSFWorkbook(file);
4     HSSFSheet hsheet1 = (HSSFSheet)hwbook.GetSheet("Sheet1");
5     HSSFSheet hsheet2 = (HSSFSheet)hwbook.GetSheet("Sheet2");
6     file.Close(); 
7     //hsheet2.GetRow(4).GetCell(5).SetCellValue("插入失败!");
8     hsheet2.CreateRow(4).CreateCell(5);
9     hsheet2.GetRow(4).GetCell(5).SetCellValue("插入成功!");

  

解决方法2:用sheet1副本建立sheet2

如果查一个数据都需要新建一个Cell,那就体现不出”使用模板导出“的好处了。

为什么sheet1可以写入数据,而sheet2就不行了?猜测可能由于sheet1是文件创建的(打开文档就已经存在),而sheet2是用户自己新建的(打开文档时不存在)。两者具体有什么差别,我也不得而知。但是我把sheet1按以下操作复制一份,并改名为sheet2,就可以成功写入了。

 

打完收工!

 

posted @ 2017-07-21 12:23  Dousong  阅读(765)  评论(0)    收藏  举报