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必須有字段列頭即,字段列頭,便於賦值 

如果你遇到了我沒遇到的問題,請分享給大家

 

轉 :https://www.cnblogs.com/liuxiaobo93/p/3570654.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM