日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/4 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.net 批量导入Excel用户数据功能加强版 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

?

平時我們用Asp.net導(dǎo)入用戶,一般是提供一個用戶Excel表的模板,實際導(dǎo)入數(shù)據(jù)時并非有些人愿意按你的模版制表,因此對Asp.net導(dǎo)入功能進行加強,可以導(dǎo)入非模版化的Excel數(shù)據(jù),并且支持一次處理多個Sheet表,方便的錄入人員。

第一步、上傳Excel:

代碼略。

第二步、讀取Excel數(shù)據(jù)到DataSet:

具體怎么讀取Excel數(shù)據(jù),網(wǎng)上到處都有,代碼略。

第三步、處理DataSet數(shù)據(jù)并導(dǎo)入到庫

平時這一步,一般都是取默認Excel的第一個sheet,由于采用的模板化,字段名與數(shù)據(jù)庫字段相匹配,直接導(dǎo)入即可。

如今,為了方便處理非模板化的Excel,就要讓錄入人員可以自行匹配對應(yīng)的列,加強工作就從這里開始:

?

先看哈操作界面和Excel表的結(jié)構(gòu):

↑導(dǎo)入界面

↑原始數(shù)據(jù)表

↑上傳Excel,選擇要導(dǎo)入的Sheet表

↑對應(yīng)選擇匹配內(nèi)容

?

?

部分主要代碼:

/// <summary>/// 上傳Excel 按鈕事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void btnUpload_Click(object sender, EventArgs e){//檢測是否Excel文件、創(chuàng)建服務(wù)器臨時目錄(如果目錄不存在)、上傳文件到服務(wù)器 代碼略// ……………………………………dsExcel = new DataSet();DataSet ds = GetExcelData(uploadFilePath);//將Excel數(shù)據(jù)全部讀入DataSet GetExcelData 參考網(wǎng)上現(xiàn)有代碼即可。if(ds==null)return;//清除空sheet 只保留有數(shù)據(jù)的sheetfor (int i = 0; i < ds.Tables.Count; i++){DataTable dt = ds.Tables[i].Copy();//必須復(fù)制表才能添加到新的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數(shù)據(jù)表/// </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("選擇對應(yīng)列", ""));…………………………………………}

?

/// <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, "無可用數(shù)據(jù)!");return;}if (string.IsNullOrEmpty(ddlUserNameTitle.SelectedValue)){MessageBox.Show(this, "請設(shè)置用戶名!");return;}//其它檢測工作 //………………………………DataTable dtExistUsers = dtUsers.Clone();//添加失敗記錄,包括已經(jīng)存在用戶DataTable dtAddUsers = dtUsers.Clone();//添加成功記錄var bp = new Bll();var mp = new Modle();//遍歷用戶表、處理用戶數(shù)據(jù)foreach (DataRow dr in dtUsers.Rows){mp.UserID = dr[ddlUserNameTitle.SelectedValue].ToString();if (bp.Exist(mp.UserID)){//已經(jīng)存在同名用戶dtExistUsers.ImportRow(dr);}else{//關(guān)鍵就在類似 “ddlUserTrueNameTitle.SelectedValue” 進行值的匹配mp.userTrueName = dr[ddlUserTrueNameTitle.SelectedValue].ToString();mp.StudentNumber = dr[ddlUserNumTitle.SelectedValue].ToString();//其它屬性參數(shù)//……………………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 = "執(zhí)行操作完畢:成功導(dǎo)入" + dtAddUsers.Rows.Count + "條;失敗導(dǎo)入" + dtExistUsers.Rows.Count + "條。";if (dtExistUsers.Rows.Count > 0){msg += " 失敗名單:" + " " + errorUsers;}MessageBox.Show(this, msg);}

??

補充:用到的兩個關(guān)鍵變量

/// <summary>/// 從Excel導(dǎo)入的全部Sheet表數(shù)據(jù)/// </summary>private DataSet dsExcel = null;/// <summary>/// 選中要處理的用戶表數(shù)據(jù)/// </summary>private DataTable dtUsers = null;

以上是部分主要核心代碼,其它代碼可以參考網(wǎng)上現(xiàn)有代碼。如有問題可以留言討論學(xué)習。

?

?

總結(jié)

以上是生活随笔為你收集整理的Asp.net 批量导入Excel用户数据功能加强版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。