NPOI 菜鳥實踐行之導入Excel(一)


例程excel來自群里的MM提供的,來自某次幫助,翻版必究

我們菜鳥用NPOI遇到的最常見的問題就是如何將一個excel文件內容導入到數據庫中,我僅僅講解如何利用NPOI讀取excel文件中的內容並且導入到sqlserver數據庫的例子,導入excel文件內容到數據庫,可以參考

效率最高的Excel數據導入---(c#調用SSIS Package將數據庫數據導入到Excel文件中【附源代碼下載】)

圖解SSIS循環導入Excel工作表

進入正文,我們開始進入如何用NPOI讀取excel文件,並且將excel文件里的sheet1頁里的內容導入成為DataTable,先貼下excel的內容,如下

image

如果是群里的朋友,大家可以偷懶了,呵呵要謝謝阿修羅同學哦,他提供的流傳於柳永法大大的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類,最終導入效果如下圖所示,當然寫數據庫的代碼就由大家各自發揮了,代碼和例子均已經提供下載。

下載代碼和例子

 


免責聲明!

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



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