asp.net上傳Excel文件并讀取數(shù)據(jù)的實(shí)現(xiàn)方法
前言
本文主要給大家介紹了關(guān)于asp.net上傳Excel文件并讀取數(shù)據(jù)的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(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
{
//打開連接
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ò)表單的名稱,請(qǐ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ù)器沒有安裝office,需要安裝數(shù)據(jù)訪問(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://chabaoo.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ù)客戶端的方法詳解
這篇文章主要給大家介紹了關(guān)于.Net整合Json實(shí)現(xiàn)REST服務(wù)客戶端的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
asp.net讀取excel中的數(shù)據(jù)并綁定在gridview
這篇文章主要介紹了asp.net讀取excel中的數(shù)據(jù)并綁定在gridview上的方法,需要的朋友可以參考下2014-02-02
asp.net 在客戶端顯示服務(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è)用戶訪問(wèn)一個(gè)程序,會(huì)造成混亂。2009-09-09
.NET從優(yōu)酷專輯中采集所有視頻及信息(VB.NET代碼)
因?yàn)橄胱鲆粋€(gè)視頻點(diǎn)播類的網(wǎng)站,所以開始研究視頻采集。2010-02-02
asp.net 實(shí)現(xiàn)防迅雷等下載工具盜鏈
利用IHttpHandler接口來(lái)監(jiān)聽對(duì)本網(wǎng)站的資源請(qǐng)求后綴名是否是我們要阻止的文件,如果是再判斷是否有下載權(quán)限。沒有就給它返回一個(gè)默認(rèn)的無(wú)用的文件。2009-02-02
asp.net 純真ip庫(kù)取得所在地實(shí)現(xiàn)代碼
asp.net 純真ip庫(kù)取得所在地實(shí)現(xiàn)代碼,需要的朋友可以參考一下。2009-05-05
MVC+EasyUI+三層新聞網(wǎng)站建立 tabs標(biāo)簽制作方法(六)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第六篇,教大家如何制作tabs標(biāo)簽,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
asp.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

