导入excel到后台将数据添加到数据库

Asp.net 专栏收录该内容
18 篇文章 0 订阅

前台代码:

 <el-upload
      ref="upload"
      :action="uploadUrl()"
      :on-success="handleSuccess"
      :limit="1"
      :on-preview="handlePreview"
      :file-list="fileList"
      class="upload"
      multiple
      method:="post"
      accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel,.csv">
      <el-button size="small" type="primary">选择文件</el-button>
      <div slot="tip" class="el-upload__tip"><i class="el-icon-warning" style="color:red;margin-right:5px"/>请上传excel格式,第一行为用户名,第二行为密码,第三行为小组名(默认为2)</div>
    </el-upload>


 uploadUrl() {
      var url = '../api/DynamicForm/RegisterForExcel'
      return url
    },
    handleSuccess(data) {
      if (data === 'success') {
        this.tip('注册成功!')
        this.$router.push({ path: 'adminUserManage', query: { t: +new Date() }})
      } else if (data === 'error') {
        this.errorTip('注册失败')
      }
      // 上传成功要处理的事
    },
    handlePreview() {
      // 上传前要处理的事
    },

后台代码:

public IHttpActionResult RegisterForExcel()
        {
            HttpFileCollection files = HttpContext.Current.Request.Files;
            try
            {
                foreach (string key in files.AllKeys)
                {
                    HttpPostedFile file = files[key];//file.ContentLength文件长度
                                                     //if (string.IsNullOrEmpty(file.FileName) == false)
                                                     //    file.SaveAs(HttpContext.Current.Server.MapPath("~/UploadExcel/") + file.FileName);
                                                     //全名  
                    string excelFile = file.FileName;
                    //获取文件名(不包括扩展名)  
                    string fileName = Path.GetFileNameWithoutExtension(file.FileName);
                    //扩展名  
                    string extentionName = excelFile.Substring(excelFile.LastIndexOf(".") + 1);
                    if (fileName == "" || fileName == null)
                    {

                        return Json("error");
                    }
                    if (extentionName != "xls" && extentionName != "xlsx")
                    {
                        return Json("error");
                    }
                    //浏览器安全性限制 无法直接获取客户端文件的真实路径,将文件上传到服务器端 然后获取文件源路径  
                    string dateTime = DateTime.Now.Date.ToString("yyyyMMdd");
                    string time = DateTime.Now.ToShortTimeString().Replace(":", "");
                    string newFileName = dateTime + time + DateTime.Now.Millisecond.ToString() + ".xls"; ;
                    //自己创建的文件夹 位置随意 合理即可  
                    string fileUrl = HttpContext.Current.Server.MapPath("~/UploadExcel/") + file.FileName;
                    file.SaveAs(fileUrl);
                    //Response.Write("<script>alert('已经上传到服务器文件夹')</script>");
                    if (InsetData(GetExcelDatatable(fileUrl)))
                    {
                        return Json("success");
                    }
                    else
                    {
                        return Json("error");
                    }
                }

            }
            catch(Exception ex)
            {
                return Json("error");
            }
             return Json("error");
        }

        //2:Excel数据导入Datable
        //@param fileUrl 服务器文件路径
        //@return System.Data.DataTable dt 
        protected System.Data.DataTable GetExcelDatatable(string fileUrl)
        {
            //office2007之前 仅支持.xls
            //const string cmdText = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1';";
            //支持.xls和.xlsx,即包括office2010等版本的   HDR=Yes代表第一行是标题,不是数据;
            string strFileType = System.IO.Path.GetExtension(fileUrl);
            string cmdText;
            if (strFileType == ".xls") 
            {
                cmdText = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
            }
            else
            {
                cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";
            }
            System.Data.DataTable dt = null;
            //建立连接
            OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl)); //这里电脑要装microsoft.ACE.oledb.12.0 不然会报错
            try
            {
                //打开连接
                if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }

                System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                //获取Excel的第一个Sheet名称
                string sheetName = schemaTable.Rows[0]["TABLE_NAME"].ToString().Trim();
                //查询sheet中的数据
                string strSql = "select * from [" + sheetName + "]";
                OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dt = ds.Tables[0];
                conn.Close();
                return dt;
            }
            catch (Exception ex)
            {
                conn.Close();
                return null;
            }

        }
        
        //3:从System.Data.DataTable导入数据到数据库
        //@param System.Data.DataTable dt
        protected Boolean InsetData(System.Data.DataTable dt)
        {
            int i = 0;
            string USERNAME = "";
            string PASSWORD = "";
            long GROUPID = 6 ;
            foreach (DataRow dr in dt.Rows)
            {
                //此处遍历获取excel的数据
                USERNAME = dr[0].ToString().Trim();
                PASSWORD = dr[1].ToString().Trim();
                if (dr[2].ToString().Trim() != "")
                {
                    GROUPID = Convert.ToInt64(dr[2].ToString().Trim());
                }
                //此处执行你的数据库插入语句即可
                UserList userList = new UserList();
                userList.username = USERNAME;
                userList.password = PASSWORD;
                userList.groupsId = GROUPID;
                userList.time = DateTime.Now;
                userList.formNum = 0;
                string username = userList.username;
                try
                {
                    db.UserList.Add(userList);
                    db.SaveChanges();
                    long userId = db.UserList.Where(p => p.username == username).Select(p => new { id = p.id }).First().id;
                    AddRoleAndUser(userId);
                    db.SaveChanges();
                    i++;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
            if (i == dt.Rows.Count)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

 

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值