例程excel來自群里的MM提供的,來自某次幫助,翻版必究
我們菜鳥用NPOI遇到的最常見的問題就是如何將一個excel文件內容導入到數據庫中,我僅僅講解如何利用NPOI讀取excel文件中的內容並且導入到sqlserver數據庫的例子,導入excel文件內容到數據庫,可以參考
效率最高的Excel數據導入---(c#調用SSIS Package將數據庫數據導入到Excel文件中【附源代碼下載】);
進入正文,我們開始進入如何用NPOI讀取excel文件,並且將excel文件里的sheet1頁里的內容導入成為DataTable,先貼下excel的內容,如下
如果是群里的朋友,大家可以偷懶了,呵呵要謝謝阿修羅同學哦,他提供的流傳於柳永法大大的excelhelper類
excelhelper類的代碼:
DataTable dt=ExcelHelper.ImportExcelToDataTable("2012-06-11Demo.xls"); dataGridView1.DataSource = dt;
而對於新接觸NPOI的菜鳥來說,官方也有例程,見NPOI 1.2.5 binary and examples\examples\hssf\ImportXlsToDataTable\
假如說我只需要讀取A3單元格的值,我的代碼只需要
using (FileStream file = new FileStream("2012-06-11Demo.xls", FileMode.Open, FileAccess.Read)) { hssfworkbook = new HSSFWorkbook(file); } ISheet sheet = hssfworkbook.GetSheetAt(0); string sMsg=sheet.GetRow(3).GetCell(0).ToString();//A3 MessageBox.Show(sMsg);
但是要針對單元格內容進行不同的判斷,則需要很多的考慮,如excel中的單元格是否為合並,是否為空值,單元格內容是否為sqlserver數據庫支持的類型,這些具體可以參考excelhelper類里的ImportDataTable方法。
導入效果圖如下
但是這只是一個毛坯房,我們得運用自己學的內容對他裝修下,導入到sqlserver數據庫中,而不是這樣簡單的演示。
接下來是我們要確定我們的數據行,前面的工作是確定表頭,我們確定數據行在excel表格中的行號之后,利用NPOI開源組件,將讀取到的excel數據行轉化為Datatable,或者其他sqlserver數據庫可識別的數據格式,這樣導入就很簡單了。
表頭,即如上圖中報表名稱為A2列,A2列是合並了B2到N2列的合並單元格,NPOI讀取則應該是從sheet.GetRow(1).GetCell(0)處讀取到“ 平 整 線 生 產 班 報”內容。
表數據行,即卷數為A6列,A6列的NPOI讀取則應該是從sheet.GetRow(5).GetCell(0)處讀取到“1”,品名為sheet.GetRow(5).GetCell(0)內容為“22”,以此類推
剩下的就是大家即興發揮的地方了,既然能讀取到數據,那么我們可以通過多種方法寫入到數據庫了,我依靠修改自群里朋友提供的excelhelper類,最終導入效果如下圖所示,當然寫數據庫的代碼就由大家各自發揮了,代碼和例子均已經提供下載。