asp.net上傳Excel文件并讀取數(shù)據(jù)的實(shí)現(xiàn)方法
前言
本文主要給大家介紹了關(guān)于asp.net上傳Excel文件并讀取數(shù)據(jù)的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
實(shí)現(xiàn)如下:
前臺(tái)代碼:使用服務(wù)端控件實(shí)現(xiàn)上傳
<form id="form1" runat="server"> <div> <asp:FileUpload ID="ExcelFileUpload" runat="server" /> <asp:Button ID="UploadBtn" runat="server" Text="確定上傳" OnClick="UploadBtn_Click" /> </div> </form>
服務(wù)端代碼:
protected void UploadBtn_Click(object sender, EventArgs e) { if (ExcelFileUpload.HasFile == false)//HasFile用來(lái)檢查FileUpload是否有文件 { Response.Write("<script>alert('請(qǐng)您選擇Excel文件')</script> "); return;//當(dāng)無(wú)文件時(shí),返回 } string IsXls = Path.GetExtension(ExcelFileUpload.FileName).ToString().ToLower();//System.IO.Path.GetExtension獲得文件的擴(kuò)展名 if (IsXls != ".xlsx" && IsXls != ".xls") { Response.Write(ExcelFileUpload.FileName); Response.Write("<script>alert('只可以選擇Excel文件')</script>"); return;//當(dāng)選擇的不是Excel文件時(shí),返回 } string filename = ExcelFileUpload.FileName;//獲取Execle文件名 string savePath = Server.MapPath(("UploadExcel\\") + filename);//Server.MapPath 服務(wù)器上的指定虛擬路徑相對(duì)應(yīng)的物理文件路徑 //savePath ="D:\vsproject\Projects\exceltestweb\exceltestweb\uploadfiles\test.xls" //Response.Write(savePath); DataTable ds = new DataTable(); ExcelFileUpload.SaveAs(savePath);//將文件保存到指定路徑 DataTable dt = GetExcelDatatable(savePath);//讀取excel數(shù)據(jù) List<RegNumInfo> regList = ConvertDtToInfo(dt);//將datatable轉(zhuǎn)為list File.Delete(savePath);//刪除文件 Response.Write("<script>alert('上傳文件讀取數(shù)據(jù)成功!');</script>"); } /// <summary> /// 從excel文件中讀取數(shù)據(jù) /// </summary> /// <param name="fileUrl">實(shí)體文件的存儲(chǔ)路徑</param> /// <returns></returns> private static DataTable GetExcelDatatable(string fileUrl) { //支持.xls和.xlsx,即包括office2010等版本的;HDR=Yes代表第一行是標(biāo)題,不是數(shù)據(jù); string cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileUrl + "; Extended Properties=\"Excel 12.0;HDR=Yes\""; System.Data.DataTable dt = null; //建立連接 OleDbConnection conn = new OleDbConnection(cmdText); try { //打開(kāi)連接 if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed) { conn.Open(); } System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string strSql = "select * from [Sheet1$]"; //這里指定表明為Sheet1,如果修改過(guò)表單的名稱(chēng),請(qǐng)使用修改后的名稱(chēng) OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; ; return dt; } catch (Exception exc) { throw exc; } finally { conn.Close(); conn.Dispose(); } } /// <summary> /// 將datatable轉(zhuǎn)換為list集合 /// </summary> /// <param name="dt">DataTable</param> /// <returns></returns> private static List<RegNumInfo> ConvertDtToInfo(DataTable dt) { List<RegNumInfo> list = new List<RegNumInfo>(); if (dt.Rows.Count > 0) { foreach (DataRow item in dt.Rows) { RegNumInfo info = new RegNumInfo(); info.RegNum = item[0].ToString(); info.Name = item[1].ToString(); info.Period = item[2].ToString(); info.Remark = item[3].ToString(); list.Add(info); } } return list; }
public class RegNumInfo { public string RegNum { get; set; } public string Name { get; set; } public string Period { get; set; } public string Remark { get; set; } }
注意:出現(xiàn)“未在本地計(jì)算機(jī)上注冊(cè)“microsoft.ACE.oledb.12.0”提供程序” 的報(bào)錯(cuò)的解決方案
1、因?yàn)樽x取excel文件使用的是OleDb,如果服務(wù)器沒(méi)有安裝office,需要安裝數(shù)據(jù)訪(fǎng)問(wèn)組件(AccessDatabaseEngine);
*適用于office2010的
Microsoft Access Database Engine 2010 Redistributable
https://www.microsoft.com/zh-CN/download/details.aspx?id=13255
2、在IIS應(yīng)用程序池中,設(shè)置“”啟用兼容32位應(yīng)用程序”;
解決方案具體可參考這篇文章:http://www.dbjr.com.cn/article/157457.htm
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- ASP.NET 上傳文件導(dǎo)入Excel的示例
- asp.net core webapi文件上傳功能的實(shí)現(xiàn)
- ASP.NET Core單文件和多文件上傳并保存到服務(wù)端的方法
- asp.net利用ashx文件實(shí)現(xiàn)文件的上傳功能
- asp.net大文件上傳解決方案實(shí)例代碼
- ASP.NET MVC實(shí)現(xiàn)批量文件上傳
- ASP.NET Core文件上傳與下載實(shí)例(多種上傳方式)
- 解決asp.net上傳文件超過(guò)了最大請(qǐng)求長(zhǎng)度的問(wèn)題
- ASP.NET MVC HttpPostedFileBase文件上傳的實(shí)例代碼
- ASP.NET 上傳文件到共享文件夾的示例
相關(guān)文章
.Net整合Json實(shí)現(xiàn)REST服務(wù)客戶(hù)端的方法詳解
這篇文章主要給大家介紹了關(guān)于.Net整合Json實(shí)現(xiàn)REST服務(wù)客戶(hù)端的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01asp.net讀取excel中的數(shù)據(jù)并綁定在gridview
這篇文章主要介紹了asp.net讀取excel中的數(shù)據(jù)并綁定在gridview上的方法,需要的朋友可以參考下2014-02-02asp.net 在客戶(hù)端顯示服務(wù)器端任務(wù)處理進(jìn)度條的探討
由于 HTTP 協(xié)議本身的無(wú)狀態(tài)性,B/S結(jié)構(gòu)的程序無(wú)法像C/S程序那樣,實(shí)時(shí)顯示程序處理的進(jìn)度。搜索一下網(wǎng)上,一般都是采用靜態(tài)變量保存程序執(zhí)行進(jìn)度的方法實(shí)現(xiàn),但是,這種方法是完全錯(cuò)誤的,在并發(fā)的情況下,多個(gè)用戶(hù)訪(fǎng)問(wèn)一個(gè)程序,會(huì)造成混亂。2009-09-09.NET從優(yōu)酷專(zhuān)輯中采集所有視頻及信息(VB.NET代碼)
因?yàn)橄胱鲆粋€(gè)視頻點(diǎn)播類(lèi)的網(wǎng)站,所以開(kāi)始研究視頻采集。2010-02-02asp.net 實(shí)現(xiàn)防迅雷等下載工具盜鏈
利用IHttpHandler接口來(lái)監(jiān)聽(tīng)對(duì)本網(wǎng)站的資源請(qǐng)求后綴名是否是我們要阻止的文件,如果是再判斷是否有下載權(quán)限。沒(méi)有就給它返回一個(gè)默認(rèn)的無(wú)用的文件。2009-02-02asp.net 純真ip庫(kù)取得所在地實(shí)現(xiàn)代碼
asp.net 純真ip庫(kù)取得所在地實(shí)現(xiàn)代碼,需要的朋友可以參考一下。2009-05-05MVC+EasyUI+三層新聞網(wǎng)站建立 tabs標(biāo)簽制作方法(六)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第六篇,教大家如何制作tabs標(biāo)簽,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07asp.net core 使用 TestServer 來(lái)做集成測(cè)試的方法
這篇文章主要介紹了asp.net core 使用 TestServer 來(lái)做集成測(cè)試,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11在Asp.net下實(shí)現(xiàn)變長(zhǎng)連接的web即時(shí)應(yīng)用的實(shí)現(xiàn)范例及ReverseAjax的演示介紹
根據(jù)公司近期的一個(gè)培訓(xùn)整理的資料,附件包括一個(gè)完整的使用變長(zhǎng)連接的web即時(shí)聊天室的范例和針對(duì)ReverseAjax的ppt培訓(xùn)文稿,其中ppt中包含了對(duì)范例程序的完整講解2011-12-12