asp.net上傳Excel文件并讀取數(shù)據(jù)的實現(xiàn)方法
前言
本文主要給大家介紹了關于asp.net上傳Excel文件并讀取數(shù)據(jù)的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
實現(xiàn)如下:
前臺代碼:使用服務端控件實現(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>
服務端代碼:
protected void UploadBtn_Click(object sender, EventArgs e)
{
if (ExcelFileUpload.HasFile == false)//HasFile用來檢查FileUpload是否有文件
{
Response.Write("<script>alert('請您選擇Excel文件')</script> ");
return;//當無文件時,返回
}
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;//當選擇的不是Excel文件時,返回
}
string filename = ExcelFileUpload.FileName;//獲取Execle文件名
string savePath = Server.MapPath(("UploadExcel\\") + filename);//Server.MapPath 服務器上的指定虛擬路徑相對應的物理文件路徑
//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轉為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代表第一行是標題,不是數(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轉換為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,如果服務器沒有安裝office,需要安裝數(shù)據(jù)訪問組件(AccessDatabaseEngine);
*適用于office2010的
Microsoft Access Database Engine 2010 Redistributable
https://www.microsoft.com/zh-CN/download/details.aspx?id=13255
2、在IIS應用程序池中,設置“”啟用兼容32位應用程序”;
解決方案具體可參考這篇文章:http://www.dbjr.com.cn/article/157457.htm
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
.Net整合Json實現(xiàn)REST服務客戶端的方法詳解
這篇文章主要給大家介紹了關于.Net整合Json實現(xiàn)REST服務客戶端的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-01-01
asp.net讀取excel中的數(shù)據(jù)并綁定在gridview
這篇文章主要介紹了asp.net讀取excel中的數(shù)據(jù)并綁定在gridview上的方法,需要的朋友可以參考下2014-02-02
.NET從優(yōu)酷專輯中采集所有視頻及信息(VB.NET代碼)
因為想做一個視頻點播類的網(wǎng)站,所以開始研究視頻采集。2010-02-02
MVC+EasyUI+三層新聞網(wǎng)站建立 tabs標簽制作方法(六)
這篇文章主要為大家詳細介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第六篇,教大家如何制作tabs標簽,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
asp.net core 使用 TestServer 來做集成測試的方法
這篇文章主要介紹了asp.net core 使用 TestServer 來做集成測試,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
在Asp.net下實現(xiàn)變長連接的web即時應用的實現(xiàn)范例及ReverseAjax的演示介紹
根據(jù)公司近期的一個培訓整理的資料,附件包括一個完整的使用變長連接的web即時聊天室的范例和針對ReverseAjax的ppt培訓文稿,其中ppt中包含了對范例程序的完整講解2011-12-12

