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

转载 willingtolove 2019/7/7 19:26:27

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

前言

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

实现如下:

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

??
???
???? ???? ???
??

服务端代码:

protected?void?UploadBtn_Click(object?sender,?EventArgs?e)
{
?if?(ExcelFileUpload.HasFile?==?false)//HasFile用来检查FileUpload是否有文件
?{
??Response.Write("?");
??return;//当无文件时,返回
?}
?string?IsXls?=?Path.GetExtension(ExcelFileUpload.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
?if?(IsXls?!=?".xlsx"?&&?IsXls?!=?".xls")
?{
??Response.Write(ExcelFileUpload.FileName);
??Response.Write("");
??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?regList?=?ConvertDtToInfo(dt);//将datatable转为list
?File.Delete(savePath);//删除文件

?Response.Write("");
}
///?
///?从excel文件中读取数据
///?
///?实体文件的存储路径
///?
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();
?}
}
///?
///?将datatable转换为list集合
///?
///?DataTable
///?
private?static?List?ConvertDtToInfo(DataTable?dt)
{
?List?list?=?new?List();
?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,需要安装数据访问组件(AccessDatabaseEngine);

    *适用于office2010的

    Microsoft Access Database Engine 2010 Redistributable

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

  2、在IIS应用程序池中,设置“”启用兼容32位应用程序”;

解决方案具体可参考这篇文章:https://www.zyiz.net/article/157457.htm

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对找一找为什么上不了bet356_bet356 下载安装_bet356黑钱网的支持。

上一篇:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法

下一篇:详解.NET Core 使用HttpClient SSL请求出错的解决办法

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    IT文章导航
    扫一扫关注最新编程为什么上不了bet356_bet356 下载安装_bet356黑钱