Asp.net 批量导入Excel用户数据功能加强版

 

 

平时我们用Asp.net导入用户,一般是提供一个用户Excel表的模板,实际导入数据时并非有些人愿意按你的模版制表,因此对Asp.net导入功能进行加强,可以导入非模版化的Excel数据,并且支持一次处理多个Sheet表,方便的录入人员。

第一步、上传Excel:

代码略。

第二步、读取Excel数据到DataSet:

具体怎么读取Excel数据,网上到处都有,代码略。

第三步、处理DataSet数据并导入到库

平时这一步,一般都是取默认Excel的第一个sheet,由于采用的模板化,字段名与数据库字段相匹配,直接导入即可。

如今,为了方便处理非模板化的Excel,就要让录入人员可以自行匹配对应的列,加强工作就从这里开始:

 

先看哈操作界面和Excel表的结构:

↑导入界面

↑原始数据表

↑上传Excel,选择要导入的Sheet表

↑对应选择匹配内容

 

 

部分主要代码:

        /// <summary>/// 上传Excel 按钮事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void btnUpload_Click(object sender, EventArgs e){//检测是否Excel文件、创建服务器临时目录(如果目录不存在)、上传文件到服务器  代码略// ……………………………………dsExcel = new DataSet();DataSet ds = GetExcelData(uploadFilePath);//将Excel数据全部读入DataSet  GetExcelData 参考网上现有代码即可。if(ds==null)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 name="sender"></param>/// <param name="e"></param>protected 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表后,重新绑定各选择项 /// </summary>private void BindTableColumnName(){ddlUserNameTitle.Items.Clear();ddlUserNameTitle.DataSource = dtUsers.Columns;ddlUserNameTitle.DataBind();ddlUserNameTitle.Items.Insert(0, new ListItem("选择对应列", ""));…………………………………………}

 

        /// <summary>/// 提交确认按钮/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected 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表数据/// </summary>private DataSet dsExcel = null;/// <summary>/// 选中要处理的用户表数据/// </summary>private DataTable dtUsers = null;

以上是部分主要核心代码,其它代码可以参考网上现有代码。如有问题可以留言讨论学习。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#+Signalr+Vue实现B站视频自动回复评论,当一个最懒程序员!

Part1前言前几天刷到了程序员鱼皮的自动回复视频评论的视频&#xff0c;于是我也想来试试&#xff01;Part2开始第一步打开想要自动回复评论的视频url&#xff0c;打开调试模式&#xff01;然后找到可以触发评论的网络请求可以看到我们的oid是可以唯一确定视频的id,那么这个oid…

一张图不用,纯CSS 做个生日贺卡

朋友生日了&#xff0c;直接画&#xff0c;炫技并且表示本人闲的全身疼才会去拿CSS画画&#xff0c;以此嘲弄对方的加班&#xff1a; 既然贺卡做出来了&#xff0c;那就顺便介绍一下贺卡制作流程吧&#xff0c;其实也不是什么技术&#xff0c;也就是CSS 拼拼拼就可以了&#…

Android Notification总结

Android Notification总结 目录[-] &#xfeff;&#xfeff;一、通知的主要功能 二、通知简介 三、通知的使用流程 四、使用NotificationCompat.Builder设置通知的属性&#xff1a; 五、管理通知 &#xfeff;&#xfeff;一、通知的主要功能 显示接收到短消息、即使消息等信…

五、登录页倒计时制作《仿淘票票系统前后端完全制作(除支付外)》

一、登录功能的实现 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节我们已经完成了基本页面的制作&#xff0c;在本节中&#xff0c;我们将会开始完成登录功能的实现。 实现登录功能需要增加一个用户组件&#xff1a; 这个用户组件是需要选择…

【MATLAB统计分析与应用100】案例001:matlab使用Importdata函数导入文本txt数据

配套实验数据包下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1T4zUFmCIOCKIisdGRQPddg?pwdddi1 文章目录1. 调用importdata函数读取文件中的数据2. 调用importdata函数读取文件数据&#xff0c;返回结构体变量x3. 调用importdata函数读取文件中的数据&#xff0c…

MAUI 入门教程系列(3.多目标平台)

前言如果您是第一次创建MAUI项目, 并且在之前也并没有接触过Xamarin.Forms应用, 或许你并不知道MAUI的强大优势, 在原来的Xamarin.Forms当中, 我们基于不同平台的项目他们是单独维护的。如下所示:因为如此, 你需要维护不同平台的项目。包括每个项目当中包含的资源、图像、属性定…

六、注册页功能制作《仿淘票票系统前后端完全制作(除支付外)》

一、注册块内容制作 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节已经知道了如何制作登录块内容&#xff0c;但是咱们先做还没有注册&#xff0c;所以就测试不了登录块功能&#xff0c;现在咱们同样的&#xff0c;在注册块中添加一个变量和一…

【MATLAB统计分析与应用100例】案例002:matlab使用xlsread函数读取excel中的数据

文章目录 1. 读取文件excel表中单元格A2:H4中的数据2. 读取excel第1个工作表中单元格A2:C3中的数据,将数据分别加1后返回3. 读取excel第1个工作表中单元格A2:H2中的数据,将读取到的数据分别加1,返回数值矩阵num,文本矩阵txt,元胞数组raw,变换后数值矩阵X1. 读取文件excel…

美图秀秀首页界面按钮设计(二)

本文实现美图秀秀首页中的按钮&#xff0c;它包含3张图片和一个文本。通过开发按钮&#xff0c;我们可以学到iOS的自定义控件&#xff0c;绘制图片和文本的知识。【声明&#xff1a;本博客只能用作学习用途&#xff0c;不得用于商业用途&#xff0c;图片资源均来自官方&#xf…

第三方免费加固横向对比

前言 基于java开发的android应用由于其语言的特性&#xff0c;所以很容易被反编译&#xff0c;虽然android提供了proguard&#xff0c;但是也只是增加了源码阅读的难度&#xff0c;其中业务逻辑依旧可以分析得出。有些人通过各种破解手段将apk文件破解、反编译&#xff0c;然后…

(02).NET MAUI实战 布局

1.概要既然要做实战开发会建项目之后就需要认识布局控件了&#xff0c;本篇文章分享.NET MAUI中的一些基础常用的布局控件。GridStackLayoutFalyxLayoutAbsoluteLayout2.详细内容(1)Grid语法&#xff1a;<Grid RowDefinitions"50,50,50,50" RowSpacing"10&qu…

[Javascript] Avoid Creating floats if they are not needed

https://channel9.msdn.com/Series/Practical-Performance-Tips-to-Make-Your-HTMLJavaScript-Faster/06?WT.mc_id13400-DEV-sitepoint-article24 转载于:https://www.cnblogs.com/yoyohappy/p/5884629.html

七、后台入口及添加影院实现《仿淘票票系统前后端完全制作(除支付外)》

一、登录后台窗口显示与跳转 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节已经完成了登录和注册功能&#xff0c;在这一节咱们将会实现对应的后台入口进入和一些后台功能的制作。 首先咱们需要记录一下登录的UID&#xff0c;因为咱们后台界面…

【MATLAB统计分析与应用100例】案例003:matlab调用smooth函数进行加噪数据的平滑处理

文章目录 1. 产生加噪正弦波信号,绘制加噪波形图2. 利用移动平均法对加噪信号进行平滑处理,绘制平滑波形图3. 利用lowess方法对加噪信号进行平滑处理,绘制平滑波形图4. 利用rlowess方法对加噪信号进行平滑处理,绘制平滑波形图5. 利用loess方法对加噪信号进行平滑处理,绘制…

八、影片添加页实现《仿淘票票系统前后端完全制作(除支付外)》

一、影片添加页 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一届影院添加页功能已经完成&#xff0c;这一节咱们实现影片添加页内容。 影片添加页如下&#xff1a; 该页面实现起来比较简单&#xff0c;点击图片后使用文件上传组件进行图片上传…

MAUI 通用权限框架(ABP)

简介众所周知, MAUI目前发布正式版本了, 那么对应, MAUI对应的ABP框架也应该马上出现, 这点也恰巧在我的预料之中, 所以在去年年底就开始着手Xamarin.Forms的ABP框架迭代。到目前为止,针对Xamarin.Forms 以及 WPF版本的 ABP框架已经在之前的文章当中给大家介绍过。那么本次主要…

《Matlab实用案例》系列Matlab从入门到精通实用100例案例教程目录(持续更新)

文章目录1. 专栏简介2. 专栏地址3. 专栏目录1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之《Matlab使用案例》 3. 专栏目录 【MATLAB统计分析与应用100例】案例001&#xff1a;matlab使用Importdata函数导入文本txt数据【MATLAB统计分析与应用100例】案例002&#xff…

Quartz2 定时器 《一》(概述)

为什么80%的码农都做不了架构师&#xff1f;>>> Quartz2 说白了&#xff0c;就是个功能比较完善的定时器&#xff0c;可以通过指定的时间执行指定的任务。 应用范围 a.比如让商城的活动&#xff08;对象&#xff09;在指定的时间&#xff08;定时&#xff0…

九、为影院添加影片《仿淘票票系统前后端完全制作(除支付外)》

一、数据获取 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节已展示了影院页&#xff0c;但是你点击影院页进入后将看不到任何数据&#xff0c;这是因为当前影院还未有添加的影片&#xff0c;本节之后将会从页面开始完成这个功能。 首先我们应…