公司做网站需要什么资质,财务系统,外国人做的篆字网站,2023营业执照年检平时我们用Asp.net导入用户#xff0c;一般是提供一个用户Excel表的模板#xff0c;实际导入数据时并非有些人愿意按你的模版制表#xff0c;因此对Asp.net导入功能进行加强#xff0c;可以导入非模版化的Excel数据#xff0c;并且支持一次处理多个Sheet表#xff0c;方便… 平时我们用Asp.net导入用户一般是提供一个用户Excel表的模板实际导入数据时并非有些人愿意按你的模版制表因此对Asp.net导入功能进行加强可以导入非模版化的Excel数据并且支持一次处理多个Sheet表方便的录入人员。
第一步、上传Excel
代码略。
第二步、读取Excel数据到DataSet
具体怎么读取Excel数据网上到处都有代码略。
第三步、处理DataSet数据并导入到库
平时这一步一般都是取默认Excel的第一个sheet由于采用的模板化字段名与数据库字段相匹配直接导入即可。
如今为了方便处理非模板化的Excel就要让录入人员可以自行匹配对应的列加强工作就从这里开始 先看哈操作界面和Excel表的结构 ↑导入界面 ↑原始数据表 ↑上传Excel选择要导入的Sheet表 ↑对应选择匹配内容 部分主要代码 /// summary/// 上传Excel 按钮事件/// /summary/// param namesender/param/// param namee/paramprotected void btnUpload_Click(object sender, EventArgs e){//检测是否Excel文件、创建服务器临时目录如果目录不存在、上传文件到服务器 代码略// ……………………………………dsExcel new DataSet();DataSet ds GetExcelData(uploadFilePath);//将Excel数据全部读入DataSet GetExcelData 参考网上现有代码即可。if(dsnull)return;//清除空sheet 只保留有数据的sheetfor (int i 0; i ds.Tables.Count; i){DataTable dt ds.Tables[i].Copy();//必须复制表才能添加到新的DataSettry{if (dt.Columns[0].ColumnName F1 dt.Rows[0][0].ToString() ){//ds.Tables.Remove(dt);}else{dsExcel.Tables.Add(dt);}}catch{// ignored}}ViewState[dsExcel] dsExcel;ddlExcelSheets.DataSource dsExcel.Tables;ddlExcelSheets.DataBind();dtUsers dsExcel.Tables[0];usersCount.InnerText dtUsers.Rows.Count 条记录;BindTableColumnName();ViewState[dtUsers] dtUsers; } /// summary/// 切换Excel sheet数据表/// /summary/// param namesender/param/// param namee/paramprotected void ddlExcelSheets_SelectedIndexChanged(object sender, EventArgs e){if (dsExcel null ViewState[dsExcel] ! null){dsExcel (DataSet)ViewState[dsExcel];}if (dsExcel ! null){dtUsers dsExcel.Tables[ddlExcelSheets.SelectedValue];usersCount.InnerText dtUsers.Rows.Count 条记录;//切换sheet表后重新绑定各选择项BindTableColumnName();ViewState[dtUsers] dtUsers;}} /// summary/// 切换Excel sheet表后重新绑定各选择项 /// /summaryprivate void BindTableColumnName(){ddlUserNameTitle.Items.Clear();ddlUserNameTitle.DataSource dtUsers.Columns;ddlUserNameTitle.DataBind();ddlUserNameTitle.Items.Insert(0, new ListItem(选择对应列, ));…………………………………………} /// summary/// 提交确认按钮/// /summary/// param namesender/param/// param namee/paramprotected void btnSub_Click(object sender, EventArgs e){if (dtUsers null ViewState[dtUsers] ! null){dtUsers (DataTable)ViewState[dtUsers];}if (dtUsers null || dtUsers.Rows.Count 1){MessageBox.Show(this, 无可用数据);return;}if (string.IsNullOrEmpty(ddlUserNameTitle.SelectedValue)){MessageBox.Show(this, 请设置用户名);return;}//其它检测工作 //………………………………DataTable dtExistUsers dtUsers.Clone();//添加失败记录包括已经存在用户DataTable dtAddUsers dtUsers.Clone();//添加成功记录var bp new Bll();var mp new Modle();//遍历用户表、处理用户数据foreach (DataRow dr in dtUsers.Rows){mp.UserID dr[ddlUserNameTitle.SelectedValue].ToString();if (bp.Exist(mp.UserID)){//已经存在同名用户dtExistUsers.ImportRow(dr);}else{//关键就在类似 “ddlUserTrueNameTitle.SelectedValue” 进行值的匹配mp.userTrueName dr[ddlUserTrueNameTitle.SelectedValue].ToString();mp.StudentNumber dr[ddlUserNumTitle.SelectedValue].ToString();//其它属性参数//……………………if (bp.Add(mp)){dtAddUsers.ImportRow(dr);}else{if (!dtExistUsers.Rows.Contains(dr)){dtExistUsers.ImportRow(dr);}}}}string errorUsers ;foreach (DataRow dr in dtExistUsers.Rows){errorUsers dr[ddlUserNameTitle.SelectedValue] ;} string msg 执行操作完毕成功导入 dtAddUsers.Rows.Count 条失败导入 dtExistUsers.Rows.Count 条。;if (dtExistUsers.Rows.Count 0){msg 失败名单 errorUsers;}MessageBox.Show(this, msg);} 补充用到的两个关键变量 /// summary/// 从Excel导入的全部Sheet表数据/// /summaryprivate DataSet dsExcel null;/// summary/// 选中要处理的用户表数据/// /summaryprivate DataTable dtUsers null;
以上是部分主要核心代码其它代码可以参考网上现有代码。如有问题可以留言讨论学习。