有些时候我们需要批量添加数据,如果我们直接使用添加功能添加会很繁琐,而且如果数据没了,还要这样添加,这样显然是不好的,所以我们可以先把数据记录在excel中,直接导入即可,还可以重用,不用一个一个添加,这样可以解决不少的时间,现在我们来看看如何在.net中导入excel数据!

     大致的步骤是这样的:

     首先,我们要在excel中添加好数据,保存好

     其次,excel文件导入到项目中的指定文件夹下,然后读取excel中的数据到内存中(DataTable)

     最后,从dataTable中取出这些数据添加到指定的数据库表里即可

   下面来看一个具体的例子:

   

netcoremvc layui 导入excel文件 .net导入excel数据_数据

netcoremvc layui 导入excel文件 .net导入excel数据_数据_02

View Code

//查询excel的方式
  public DataSet ExecleDs(string filenameurl, string table)
    {

        DataSet ds = new DataSet();

              string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + filenameurl + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'";
        OleDbConnection conn = new OleDbConnection(strConn);

        conn.Open(); 
        
        string tableName=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim();

        OleDbDataAdapter odda = new OleDbDataAdapter("select * from ["+tableName+"]",conn);

        odda.Fill(ds, table);

        return ds;

    }

   //讲excel添加到项目中,并读取数据到数据库表中
    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {

        if (banji.SelectedValue == "0")
        { 
        Response.Write("<script>alert('请选择班级!')</script>");   //当Excel表为空时,对用户进行提示
        return;
        }
       
        int ccid = Convert.ToInt32(banji.SelectedValue);
        
        if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
        {
            Response.Write("<script>alert('请您选择Excel文件')</script> ");
            return;//当无文件时,返回
        }
        string IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
        if (IsXls != ".xls")
        {
            Response.Write("<script>alert('只可以选择Excel文件')</script>");
            return;//当选择的不是Excel文件时,返回
        }
      
            string filename = FileUpload1.FileName;              //获取Execle文件名  DateTime日期函数
            string savePath = Server.MapPath(("~\\CourseFile\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
            FileUpload1.SaveAs(savePath);                        //SaveAs 将上传的文件内容保存在服务器上
            DataSet ds = new DataSet();
            try
            {
                 ds = ExecleDs(savePath, filename);
            }
            catch 
            {
                Response.Write("<script>alert('导入失败,Excel工作表标签名错误,标签名必须是Sheet1,请查证后再导入!')</script>");
                return;
            }

            //DataRow dr = ds.Tables[0].Rows;            //定义一个DataRow数组
            int rowsnum = ds.Tables[0].Rows.Count;
           
            if (rowsnum ==0)
            {
                Response.Write("<script>alert('Excel表为空表,无数据!')</script>");   //当Excel表为空时,对用户进行提示
                return;
            }
            else
            {
                for (int i = 0; i < rowsnum; i++)
                {

                    M_CZUser mu = new M_CZUser();
                    B_CZUser bu = new B_CZUser();
                     try
                    {
                        mu.userid = ds.Tables[0].Rows[i]["帐号"].ToString();
                        mu.pwd = ds.Tables[0].Rows[i]["密码"].ToString();
                        mu.uname = ds.Tables[0].Rows[i]["姓名"].ToString();
                        mu.num = ds.Tables[0].Rows[i]["学号"].ToString();//日期 excel列名【名称不能变,否则就会出错】
                        mu.sex = ds.Tables[0].Rows[i]["性别"].ToString();
                    mu.utype = 4;
                    mu.class_id = ccid;
                    mu.birthday = DateTime.Parse(ds.Tables[0].Rows[i]["出生日期"].ToString());
                    mu.Lastlogintime = DateTime.Now;
                    mu.idcard = ds.Tables[0].Rows[i]["身份证号码"].ToString();
                    DataSet ds2 = bu.GetList("*", "userid='" + ds.Tables[0].Rows[i]["帐号"].ToString() + "'");
                    if (ds2.Tables[0].Rows.Count > 0)
                    {
                        Function.showmessage(this.Page, "帐号" + ds.Tables[0].Rows[i]["帐号"].ToString() + "已存在,操作终止。", "", "");
                        return;
                    }
                    DataSet ds3 = bu.GetList("*", "num='" + ds.Tables[0].Rows[i]["学号"].ToString() + "'");
                    if (ds3.Tables[0].Rows.Count > 0)
                    {
                        Function.showmessage(this.Page, "学号" + ds.Tables[0].Rows[i]["学号"].ToString() + "已存在。", "", "");
                        return;
                    }
                        bu.Add(mu);
                    }
                    catch (Exception ex)       //捕捉异常
                    {
                        Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
                        return;
                    }

                }
                Response.Write("<script>alert('Excle表导入成功!')</script>");
            }
  

    } 
Excel其实也是一种数据库,既然是数据库,就可以用一般的操作数据库的方法来做处理。
         /// <summary>
        /// 包含表头的连接
        /// </summary>
        private  const string EXCELCONNECTIN = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';";        /// <summary>
        /// 不包含表头的连接
        /// </summary>
        private  const string EXCELCONNECTINNOHDR = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=NO;IMEX=1;';";

 

一般的情况下,还是使用包含表头的连接,否则会出现,导入到数据库的时候,有些字段的值是空的

多思考,多创新,才是正道!