欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net上傳Excel文件并讀取數(shù)據(jù)的實(shí)現(xiàn)方法

 更新時(shí)間:2019年03月07日 09:47:29   作者:willingtolove  
這篇文章主要給大家介紹了關(guān)于asp.net上傳Excel文件并讀取數(shù)據(jù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

本文主要給大家介紹了關(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ì)腳本之家的支持。

相關(guān)文章

最新評(píng)論