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
{
//打開(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ò)表單的名稱,請(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ù)器沒(méi)有安裝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://m.fzitv.net/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)文章
asp.net中“從客戶端中檢測(cè)到有潛在危險(xiǎn)的Request.Form值”錯(cuò)誤的解決辦法
這篇文章主要介紹了asp.net中“從客戶端中檢測(cè)到有潛在危險(xiǎn)的Request.Form值”錯(cuò)誤的解決辦法,需要的朋友可以參考下2015-11-11
Repeater控件數(shù)據(jù)導(dǎo)出Excel(附演示動(dòng)畫(huà))
本文我們實(shí)現(xiàn)為Repeater控件數(shù)據(jù)導(dǎo)出Excel的功能,附動(dòng)畫(huà)演示,感興趣的朋友可以了解下2013-01-01
asp.net Application_AcquireRequestState事件,導(dǎo)致Ajax客戶端不能加載
項(xiàng)目中使用Application_AcquireRequestState事件,來(lái)做一些用戶信息的驗(yàn)證工作.2010-03-03
ASP.NET Core AutoWrapper 自定義響應(yīng)輸出實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core AutoWrapper 自定義響應(yīng)輸出實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
詳解如何創(chuàng)建一個(gè).NET Core工程
本文主要介紹了如何創(chuàng)建一個(gè).NET Core工程,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
asp.net導(dǎo)出excel數(shù)據(jù)的常見(jiàn)方法匯總
這篇文章主要介紹了asp.net導(dǎo)出excel數(shù)據(jù)的常見(jiàn)方法,實(shí)例匯總了數(shù)據(jù)導(dǎo)出的常見(jiàn)的方法以及相關(guān)的注意事項(xiàng),是非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10
VB.net 查詢獲取數(shù)據(jù)庫(kù)數(shù)據(jù)信息
VB.net 查詢獲取數(shù)據(jù)庫(kù)數(shù)據(jù)信息實(shí)現(xiàn)函數(shù),需要的朋友可以參考下,代碼比較簡(jiǎn)單。2009-07-07

