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

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

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

缘由:一般的缘由是读取的文件头信息不对,多是相似于将txt文件的后缀名直接改为xls,或者由其余软件导出成的Excel。ui

意思是咱们用FileStream fs=new FileStream("demo.xls");建立的Excel表,这实际上是一个文本文件,因此不能用这种方式建立。spa

解决: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文件里追加记录code

试了不少方法使用FileMode.Append会报错、利用sheet.LastRowNum+1建立一行再往里添加数据可是最后Excel里并无显示orm

解决:blog

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必须有字段列头即,字段列头,便于赋值 ip

若是你遇到了我没遇到的问题,请分享给你们内存

相关文章
相关标签/搜索