NPOI对excel文件的导入导出

现理解:将一个Excel文件(工作簿-IWorkBook)看做是一个你要操作的对象,每个工作簿包含多个工作表(ISheet)对象,每个工作表中又包含多个行对象(IRow),每行又包含多个单元格(ICell)对象.  单元格里存储相应数据

下面帮助更直观的展示:IWorkBook --> ISheet --> IRow --> ICell

一:从数据库中将符合条件的数据导出到一个新的Excel中

  思路:

    0.ado获取导入内容

    1.创建一个IWorkBook对象.我们最终将把这个设置好的IworkBook对象写入到一个文件流中,即大功告成.

    2.创建这个IWorkBook的ISheet对象.

    3.创建这个ISheet的IRow对象.

    4.创建IRow的ICell对象,并设置数据库里相应的值

注:SqlHelper将不再附上

 //将数据库中的表的数据导出到Execel表中
            string sqlstr = "select * from T_Scripts";
            using (SqlDataReader dr = SqlHelper.ExecuteReader(sqlstr))
            {
                if (dr.HasRows)
                {
                    IWorkbook wb = new HSSFWorkbook();
                    ISheet sheet = wb.CreateSheet("Customers");
                    IRow title = sheet.CreateRow(0);    //添加列名行
                    for (int i = 0; i < dr.FieldCount; i++)     //dr.FieldCount获得当前行的列数
                    {
                        title.CreateCell(i).SetCellValue(dr.GetName(i));
                    }

                    int n = 1;
                    while (dr.Read())
                    {
                        IRow dataRow = sheet.CreateRow(n);
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            switch (dr[i].GetType().ToString())
                            {
                                case "System.Int32":
                                    dataRow.CreateCell(i).SetCellValue(dr.GetInt32(i));
                                    break;
                                case "System.String":
                                    dataRow.CreateCell(i).SetCellValue(dr.GetString(i));
                                    break;
                                case "System.DBNull":
                                    dataRow.CreateCell(i).SetCellValue("null");
                                    break;
                                case "System.DateTime":
                                    //dataRow.CreateCell(i).SetCellValue();
                                    ICell cel = dataRow.CreateCell(i);
                                    cel.SetCellValue(dr.GetDateTime(i));
                                    //设置单元格格式
                                    ICellStyle cs = wb.CreateCellStyle();
                                    IDataFormat df = wb.CreateDataFormat();
                                    cs.DataFormat = df.GetFormat("yyyy-mm-dd");
                                    cel.CellStyle = cs;
                                    break;
                                default:
                                    break;
                            }
                        }
                        n++;
                    }
                    //将IWorkBook对象写入到文件流中
                    using (FileStream fs = File.Create("d:/tscript.xls"))
                    {
                        wb.Write(fs);
                    }
                    MessageBox.Show("out success!");
                }
            }
View Code

 

二:将Excel文件中的内容录入到数据库中

思路:

  0.打开一个Excel文件流.

  1.将这个流附加到新建的一个IWorkBook对象上.此时已经拿到这个文件的对象

  2.获取这个工作簿的ISheet对象

  3.获取ISheet的IROw对象

  4.进行ado操作,将每行的数据以此添加到数据库表中

 1  string sqlstr = "insert into T_Customers ( CC_CustomerName, CC_CellPhone, CC_Landline, CC_CarNum, CC_BracketNum, CC_BuyDate) values (@name,@phone,@sphone,@carnum,@bk,@date)";
 2             //将要录入数据库的xls通过流的方式传给一个IWorkBook对象
 3             using (FileStream infs = File.Open(@"客户资料new.xls", FileMode.Open))
 4             {
 5                 IWorkbook inwb = new HSSFWorkbook(infs);
 6                 //获取工作簿每行内容
 7                 ISheet sheet1 = inwb.GetSheetAt(0);
 8                 for (int i = 1; i <= sheet1.LastRowNum; i++)//从数据行开始读取即索引为1的行; lastrownum获取的是最后一行的索引即 行数-1
 9                 {
10                     IRow datarow = sheet1.GetRow(i);
11                     //每次循环都新建一个sqlparameter数组
12                     SqlParameter[] spt = new SqlParameter[] {
13                         new SqlParameter("@name",SqlDbType.NVarChar),
14                         new SqlParameter("@phone",SqlDbType.NVarChar),
15                         new SqlParameter("@sphone",SqlDbType.NVarChar),
16                         new SqlParameter("@carnum",SqlDbType.NVarChar),
17                         new SqlParameter("@bk",SqlDbType.NVarChar),
18                         new SqlParameter("@date",SqlDbType.DateTime)
19                     };
20                     for (int j = 0; j < datarow.LastCellNum; j++)
21                     {
22                         ICell cell = datarow.GetCell(j);
23                         if (cell!=null)
24                         {
25                             spt[j].Value = cell.ToString();//添加参数
26                         }
27                         else
28                         {
29                             spt[j].Value = DBNull.Value;
30                         }
31                     }
32                     SqlHelper.ExecuteNonquery(sqlstr, spt);//插入到数据库表中的相应列
33                 }
34             }
35             MessageBox.Show("access!");
View Code

不同版本的NOPI编程貌似有些不同

posted @ 2014-04-29 20:27  搞IT的蟋蟀  阅读(370)  评论(1)    收藏  举报