c#使用NPOI导出Excel及往Excel里追加记录

最近在做一个打印发票的程序,要求保存打印记录,所以用到了NPOI往Excel里导入数据,但是遇到了一些问题没法解决,最后看了别人的Java程序后才明白。下面只是说明几个问题,而不是怎样使用NPOI

问题1:Invalid header signature; read 0x0000000000000000, expected 0xE11AB1A1E011CF

原因:通常的原因是读取的文件头信息不对,可能是类似于将txt文件的后缀名直接改成xls,或者由其他软件导出成的Excel。

意思是我们用FileStream fs=new FileStream("demo.xls");创建的Excel表,这其实是一个文本文件,所以不能用这种方式创建。

解决:

复制代码
MemoryStream ms = new MemoryStream();    //创建内存流用于写入文件       
IWorkbook workbook = new HSSFWorkbook();   //创建Excel工作部   
ISheet sheet = workbook.CreateSheet("EquipBill");//创建工作表
IRow row = sheet.CreateRow(sheet.LastRowNum);//在工作表中添加一行
ICell cell = row.CreateCell(0);//创建单元格
cell1.SetCellValue("领用单位");//赋值

workbook.Write(ms);//将Excel写入流
ms.Flush();
ms.Position = 0;

FileStream dumpFile = new FileStream(“demo.xls”, FileMode.Create, FileAccess.ReadWrite,FileShare.ReadWrite);
ms.WriteTo(dumpFile);//将流写入文件
复制代码

问题2:不能往Excel文件里追加记录

试了很多方法使用FileMode.Append会报错、利用sheet.LastRowNum+1创建一行再往里添加数据但是最后Excel里并没有显示

解决:

复制代码
FileStream fs = new FileStream(“demo.xls”, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);//读取流

POIFSFileSystem ps=new POIFSFileSystem(fs);//需using NPOI.POIFS.FileSystem;
IWorkbook workbook = new HSSFWorkbook(ps);
ISheet sheet = workbook.GetSheetAt(0);//获取工作表
IRow row = sheet.GetRow(0); //得到表头
FileStream fout = new FileStream(“demo.xls”, FileMode.Open, FileAccess.Write, FileShare.ReadWrite);//写入流
row = sheet.CreateRow((sheet.LastRowNum + 1));//在工作表中添加一行

ICell cell1 = row.CreateCell(0);
cell1.SetCellValue(“测试数据”);//赋值

fout.Flush();
workbook.Write(fout);//写入文件
workbook = null;
fout.Close();
复制代码

一看代码就明白了,先读取,再写入。为什么要得到表头,因为一个excel必须有字段列头即,字段列头,便于赋值 

如果你遇到了我没遇到的问题,请分享给大家

posted @   波谷  阅读(18241)  评论(2编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多