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,就可以成功写入了。

打完收工!

浙公网安备 33010602011771号