asp.net上傳Excel文件并讀取數(shù)據(jù)的實現(xiàn)方法
前言
本文主要給大家介紹了關(guān)于asp.net上傳Excel文件并讀取數(shù)據(jù)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
實現(xiàn)如下:
前臺代碼:使用服務(wù)端控件實現(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用來檢查FileUpload是否有文件
{
Response.Write("<script>alert('請您選擇Excel文件')</script> ");
return;//當(dāng)無文件時,返回
}
string IsXls = Path.GetExtension(ExcelFileUpload.FileName).ToString().ToLower();//System.IO.Path.GetExtension獲得文件的擴展名
if (IsXls != ".xlsx" && IsXls != ".xls")
{
Response.Write(ExcelFileUpload.FileName);
Response.Write("<script>alert('只可以選擇Excel文件')</script>");
return;//當(dāng)選擇的不是Excel文件時,返回
}
string filename = ExcelFileUpload.FileName;//獲取Execle文件名
string savePath = Server.MapPath(("UploadExcel\\") + filename);//Server.MapPath 服務(wù)器上的指定虛擬路徑相對應(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">實體文件的存儲路徑</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,如果修改過表單的名稱,請使用修改后的名稱
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)“未在本地計算機上注冊“microsoft.ACE.oledb.12.0”提供程序” 的報錯的解決方案
1、因為讀取excel文件使用的是OleDb,如果服務(wù)器沒有安裝office,需要安裝數(shù)據(jù)訪問組件(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.dhdzp.com/article/157457.htm
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
asp.net中“從客戶端中檢測到有潛在危險的Request.Form值”錯誤的解決辦法
這篇文章主要介紹了asp.net中“從客戶端中檢測到有潛在危險的Request.Form值”錯誤的解決辦法,需要的朋友可以參考下2015-11-11
Repeater控件數(shù)據(jù)導(dǎo)出Excel(附演示動畫)
本文我們實現(xiàn)為Repeater控件數(shù)據(jù)導(dǎo)出Excel的功能,附動畫演示,感興趣的朋友可以了解下2013-01-01
asp.net Application_AcquireRequestState事件,導(dǎo)致Ajax客戶端不能加載
項目中使用Application_AcquireRequestState事件,來做一些用戶信息的驗證工作.2010-03-03
ASP.NET Core AutoWrapper 自定義響應(yīng)輸出實現(xiàn)
這篇文章主要介紹了ASP.NET Core AutoWrapper 自定義響應(yīng)輸出實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
asp.net導(dǎo)出excel數(shù)據(jù)的常見方法匯總
這篇文章主要介紹了asp.net導(dǎo)出excel數(shù)據(jù)的常見方法,實例匯總了數(shù)據(jù)導(dǎo)出的常見的方法以及相關(guān)的注意事項,是非常實用的技巧,需要的朋友可以參考下2014-10-10
VB.net 查詢獲取數(shù)據(jù)庫數(shù)據(jù)信息
VB.net 查詢獲取數(shù)據(jù)庫數(shù)據(jù)信息實現(xiàn)函數(shù),需要的朋友可以參考下,代碼比較簡單。2009-07-07

