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

若是你遇到了我沒遇到的問題,請分享給你們內存

相關文章
相關標籤/搜索