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.pswp.cn/news/286178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286178.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言試題三十八之將s所指字符串中除了下標為偶數、同時ascii值也為偶數的字符外,其余的全都刪除;串中剩余字符所形成的一個新串放在t所指的一個數組中。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

C#+Signalr+Vue實現B站視頻自動回復評論,當一個最懶程序員!

Part1前言前幾天刷到了程序員魚皮的自動回復視頻評論的視頻&#xff0c;于是我也想來試試&#xff01;Part2開始第一步打開想要自動回復評論的視頻url&#xff0c;打開調試模式&#xff01;然后找到可以觸發評論的網絡請求可以看到我們的oid是可以唯一確定視頻的id,那么這個oid…

一張圖不用,純CSS 做個生日賀卡

朋友生日了&#xff0c;直接畫&#xff0c;炫技并且表示本人閑的全身疼才會去拿CSS畫畫&#xff0c;以此嘲弄對方的加班&#xff1a; 既然賀卡做出來了&#xff0c;那就順便介紹一下賀卡制作流程吧&#xff0c;其實也不是什么技術&#xff0c;也就是CSS 拼拼拼就可以了&#…

C語言試題三十九之將s所指字符串中除了下標為奇數、同時ascii值也為奇數的字符外,其余的全都刪除;串中剩余字符所形成的一個新串放在t所指的一個數組中。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

The type android.support.v4.view.ScrollingView cannot be resolved. It is indirectly referenced from

前幾天另一個項目使用RecyclerView控件&#xff0c;引用類庫然后繼承一切都很順序 詳細&#xff1a;http://www.cnblogs.com/freexiaoyu/p/5022602.html 今天打算將另一個項目的ListView控件也替換成RecyclerView以同樣的方式引用了RecyclerView,引用地址請點擊上面的鏈接查看 …

Mysql索引的類型和優缺點

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分)&#xff0c;它們包含著對數據表里所有記錄的引用指針。注&#xff1a;[1]索引不是萬能的&#xff01;索引可以加快數據檢索操作&#xff0c;但會使數據修改操作變慢。每修改數據記錄&#xff0c;索引就必須刷…

Android Notification總結

Android Notification總結 目錄[-] &#xfeff;&#xfeff;一、通知的主要功能 二、通知簡介 三、通知的使用流程 四、使用NotificationCompat.Builder設置通知的屬性&#xff1a; 五、管理通知 &#xfeff;&#xfeff;一、通知的主要功能 顯示接收到短消息、即使消息等信…

C#-Linq源碼解析之Any

前言在Dotnet開發過程中&#xff0c;Any作為IEnumerable的擴展方法&#xff0c;十分常用。本文對Any方法的關鍵源碼進行簡要分析&#xff0c;以方便大家日后更好的使用該方法。使用Any 確定序列中是否包含元素或存在元素滿足指定條件。看這樣一個例子&#xff0c;我們判斷集合中…

python_getopt解析命令行輸入參數的使用

[cpp] view plaincopyprint? import getopt import sys config { "input":"", "output":".", } #getopt三個選項&#xff0c;第一個一般為sys.argv[1:],第二個參數為短參數&#xff0c;如…

五、登錄頁倒計時制作《仿淘票票系統前后端完全制作(除支付外)》

一、登錄功能的實現 首先打開在線編輯器進入我們的項目&#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…

TextView的部分點擊事件和點擊事件

1.在TextView中實現部分點擊 我在activity中使用了clickablespan這個類&#xff0c;然后完全按照視頻上的操作下來&#xff0c;發現點擊時不響應&#xff0c;于是我便設置了電話的鏈接&#xff0c;發現這時點擊 自己設置的區域就會響應&#xff0c;但是如果我把電話鏈接刪了&am…

C語言試題四十之使字符串中尾部的*號不得多于n個;若多于n個,則刪除多于的*號;若少于或等于n個,則什么也不做,字符串中間和前面的*號不刪除。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

Meta http-equiv屬性詳解

Meta http-equiv屬性詳解 博客分類&#xff1a; Web綜合HTML瀏覽器IECache搜索引擎 http-equiv顧名思義&#xff0c;相當于http的文件頭作用&#xff0c;它可以向瀏覽器傳回一些有用的信息&#xff0c;以幫助正確和精確地顯示網頁內容&#xff0c;與之對應的屬性值為content&am…

MAUI 入門教程系列(3.多目標平臺)

前言如果您是第一次創建MAUI項目, 并且在之前也并沒有接觸過Xamarin.Forms應用, 或許你并不知道MAUI的強大優勢, 在原來的Xamarin.Forms當中, 我們基于不同平臺的項目他們是單獨維護的。如下所示:因為如此, 你需要維護不同平臺的項目。包括每個項目當中包含的資源、圖像、屬性定…

關于質量的聯想:消費示范效應

IT業界有新聞說&#xff0c;根據可靠性數據研究專家Rescue.com發布的今年一季度可靠性報告&#xff0c;“五大電腦公司中&#xff0c;聯想-IBM的分數高居首位&#xff0c;第二名是華碩&#xff0c;之前的可靠性冠軍蘋果跌落第三&#xff0c;東芝、惠普-康柏則排在第五”。大部分…

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

一、注冊塊內容制作 首先打開在線編輯器進入我們的項目&#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…