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类,最终导入效果如下图所示,当然写数据库的代码就由大家各自发挥了,代码和例子均已经提供下载。

下载代码和例子

 

posted on 2012-11-29 20:43  澜紫癜青  阅读(6395)  评论(7编辑  收藏  举报

导航