1. asp.net上传Excel文件并读取数据的实现方法

     更新时间:2019年03月07日 09:47:29   作者:willingtolove   我要评论

    这篇文章主要给大家介绍了关于asp.net上传Excel文件并读取数据的实现方法,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    前言

    本文主要给大家介绍了关于asp.net上传Excel文件并读取数据的相关内容,分享出来供大家参考学习,下面?#23433;?#22810;说了,来一起看看详细的介绍吧

    实现如下:

    前台代码:使用服务端控件实现上传

      <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数据
     List<RegNumInfo> regList = ConvertDtToInfo(dt);//将datatable转为list
     File.Delete(savePath);//删除文件
    
     Response.Write("<script>alert('上传文件读取数据成功!');</script>");
    }
    /// <summary>
    /// 从excel文件中读取数据
    /// </summary>
    /// <param name="fileUrl">实体文件的存储路径</param>
    /// <returns></returns>
    private static DataTable GetExcelDatatable(string fileUrl)
    {
     //支持.xls和.xlsx,即包括office2010等版本的;HDR=Yes代表第一行是标题,不是数据;
     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; }
    }

    注意:出现“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序” 的报错的解决方案

      1、因为读取excel文件使用的是OleDb,如果服务器没有安装office,需要安装数据访?#39318;?#20214;(AccessDatabaseEngine);

        *适用于office2010的

        Microsoft Access Database Engine 2010 Redistributable

        https://www.microsoft.com/zh-CN/download/details.aspx?id=13255

      2、在IIS应用程序池中,设置?#21834;?#21551;用兼容32位应用程序?#20445;?br />

    解决方案具体可参考这篇文章:http://www.ufoz.tw/article/157457.htm

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    相关文章

  2. .NET中如何将文本文件的内容存储到DataSet

    .NET中如何将文本文件的内容存储到DataSet

    大家在项目中比较多的会对文件进行操作,例如文件的上传下载,文件的压缩和解压等IO操作。而在.NET项目中较多的会使用DataSet,DataTable进行数据的缓存。每一个DataSet都是一个或多个DataTable对象的集合,本文主要介绍的是如何将文本文件的内容存储到DataSet里去。
    2016-12-12
  3. .net MVC使用IPrincipal进行Form登?#25216;?#26435;限验证(3)

    .net MVC使用IPrincipal进行Form登?#25216;?#26435;限验证(3)

    这篇文章主要为大家详细介绍了.net MVC使用IPrincipal进行Form登?#25216;?#26435;限验证,具有一定的参?#25216;?#20540;,?#34892;?#36259;的小伙伴们可以参?#23478;?#19979;
    2018-04-04
  4. GridView分页代码简单万能实用

    GridView分页代码简单万能实用

    GridView在使用.net技术搭建的后台,在商品列表或者是信息列表经常会出现;它的作用在于有效的管理信息,增删改查等等最主要的是还可以实现分?#24120;?#36825;一点是无可比靡的,接下来介绍如何使用GridView实现分?#24120;?#38656;要了解的朋友可以参考下
    2012-12-12
  5. .NET Core 实现定时抓取网站文章并发送到邮箱

    .NET Core 实现定时抓取网站文章并发送到邮箱

    本片文章通过实例讲述.NET Core 实现定时抓取博客园首页文章信息并发送到邮箱这个功能,对此有兴趣的朋友参考学习下。
    2018-02-02
  6. asp.net下创建、查询、修改带名称空间的 XML 文件的例子

    asp.net下创建、查询、修改带名称空间的 XML 文件的例子

    asp.net下创建、查询、修改带名称空间的 XML 文件的例子...
    2007-04-04
  7. ASP.NET Core应用错误处理之StatusCodePagesMiddleware中间件针对响应码呈现错误页面

    ASP.NET Core应用错误处理之StatusCodePagesMiddleware中间件针对

    这篇文章主要给大家介绍了关于ASP.NET Core应用错误处理之StatusCodePagesMiddleware中间件针对响应码呈现错误页面的相关资料,需要的朋友可以参考下
    2019-01-01
  8. 最新评论

    常用在线小工具

    山东群英会开奖查询