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