NPOI导入,导出数据库

<pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace 将excel数据插入数据库
{
    class Program
    {
        private static readonly string str = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
        static void Main(string[] args)
        {
            //导入数据库
            using (FileStream stream = new FileStream("C:/Users/dong/Desktop/1234.xls", FileMode.Open, FileAccess.Read))
            {
                HSSFWorkbook work = new HSSFWorkbook(stream);
                ISheet sheet = work.GetSheetAt(0);  //注意当是导入的时候用GetSheetAt(0);,导出的时候.CreateSheet("员工数据");

                DataTable table = new DataTable(); //创建以个Datatable对象

                table.Columns.Add("Name", typeof(string));

                int num = sheet.LastRowNum;
                for (int i = 1; i <= num; i++)
                {
                    IRow row = sheet.GetRow(i);   //创建行
                    DataRow daterow = table.NewRow();
                    for (int j = 1; j < row.LastCellNum; j++)
                    {
                        daterow["Name"] = row.GetCell(j).StringCellValue;
                        table.Rows.Add(daterow);
                    }

                    //Student stu = new Student();
                    //stu.Name = row.GetCell(1).StringCellValue;
                    //SqlHelper.ExecuteNonQuery("insert into T_Excel(Name) values(@Name)",
                    //                                       new SqlParameter("@Name", stu.Name));

                }


                using (SqlBulkCopy bulk = new SqlBulkCopy(str))
                {
                    bulk.DestinationTableName = "T_Excel";
                    bulk.ColumnMappings.Add("Name", "Name");
                    bulk.WriteToServer(table);
                }
            }

            //导出数据库
            List<Student> list = new List<Student>();
            DataTable dt= SqlHelper.ExecuteDataTable("select * from T_Excel");
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    list.Add(RowToModel(dr));
                }
            }
            using (FileStream stream = new FileStream("C:/Users/dong/Desktop/导出.xls", FileMode.Create, FileAccess.Write))
            {
                HSSFWorkbook work = new HSSFWorkbook();
                ISheet sheet = work.CreateSheet("员工数据");
                IRow row = sheet.CreateRow(0);
                row.CreateCell(0, CellType.NUMERIC).SetCellValue("编号");
                row.CreateCell(1, CellType.NUMERIC).SetCellValue("姓名");
                row.CreateCell(2, CellType.NUMERIC).SetCellValue("入职日期");
                for (int i = 0; i <list.Count; i++)
                {
                   Student stu = list[i];
                   IRow irow = sheet.CreateRow(i+1);
                    irow.CreateCell(0, CellType.STRING).SetCellValue(stu.Id);
                    irow.CreateCell(1, CellType.STRING).SetCellValue(stu.Name);

                    //下面是日期类型的处理
                    ICellStyle style = work.CreateCellStyle();
                    IDataFormat format = work.CreateDataFormat();

                    style.DataFormat = format.GetFormat("yyyy\"年\"m\"月\"d\"日\"");
                    ICell cellInDate = irow.CreateCell(2,CellType.NUMERIC);
                    cellInDate.CellStyle = style;
                    cellInDate.SetCellValue(stu.Time);
                }
                work.Write(stream);
            }
        }

        public static Student RowToModel(DataRow dr)
        {
            Student s = new Student();
            s.Id=(long)dr["Id"];
            s.Name=(string)dr["Name"];
            s.Time=(DateTime)dr["Time"];
            return s;
        }
    }
}


 

当从数据库导出的时候,是已知数据,创建excel表,所以用到CreateSheet,CreateRow等。

当从excel导入数据库的时候,用到GetSheet,GetRow等。

日期类型的数据处理有些特殊,在代码中可以看出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值