ASP.NET(C#)读取Excel的文件内容

 更新时间:2013年02月18日 15:49:03   转载 作者:  
开发过程中难免会遇到读取Excel文件的情况,本文主要记录读取Excel文件的方法由于本文目的是供自己和各位童鞋日后学习参考,没有考虑过多方面,把所有方法及属性全部放到了一个文件中。

.xls格式       Office2003及以下版本
.xlsx格式  Office2007 及以上版本
.csv格式       以逗号分隔的字符串文本(可以将上述两种文件类型另存为此格式)   
读取前两种格式和读取后一种格式会用两种不同的方法。

下面看程序:
页面前台:

复制代码 代码如下:

<div>       <%-- 文件上传控件  用于将要读取的文件上传 并通过此控件获取文件的信息--%>     
<asp:FileUpload ID="fileSelect" runat="server" />         
<%-- 点击此按钮执行读取方法--%>      
<asp:Button ID="btnRead" runat="server" Text="ReadStart" />
</div>  

后台代码:

复制代码 代码如下:

 //声明变量(属性)
 string currFilePath = string.Empty; //待读取文件的全路径
 string currFileExtension = string.Empty;  //文件的扩展名

 //Page_Load事件 注册按钮单击事件
 protected void Page_Load(object sender,EventArgs e)
 {
     this.btnRead.Click += new EventHandler(btnRead_Click);
 }

 
 //按钮单击事件   //里面的3个方法将在下面给出
 protected void btnRead_Click(object sender,EventArgs e)
 {
     Upload();  //上传文件方法
     if(this.currFileExtension ==".xlsx" || this.currFileExtension ==".xls")
       {
            DataTable dt = ReadExcelToTable(currFilePath);  //读取Excel文件(.xls和.xlsx格式)
       }
       else if(this.currFileExtension == ".csv")
         {
               DataTable dt = ReadExcelWidthStream(currFilePath);  //读取.csv格式文件
         }
 }

下面列出按钮单击事件中的3个方法

复制代码 代码如下:

///<summary>
///上传文件到临时目录中
///</ummary>
private void Upload()
{
HttpPostedFile file = this.fileSelect.PostedFile;
string fileName = file.FileName;
string tempPath = System.IO.Path.GetTempPath(); //获取系统临时文件路径
fileName = System.IO.Path.GetFileName(fileName); //获取文件名(不带路径)
this.currFileExtension = System.IO.Path.GetExtension(fileName); //获取文件的扩展名
this.currFilePath = tempPath + fileName; //获取上传后的文件路径 记录到前面声明的全局变量
file.SaveAs(this.currFilePath); //上传
}


///<summary>
///读取xls\xlsx格式的Excel文件的方法
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
private DataTable ReadExcelToTable(string path)
{
//连接字符串
string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
//string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //Office 07以下版本 因为本人用Office2010 所以没有用到这个连接字符串 可根据自己的情况选择 或者程序判断要用哪一个连接字符串
using(OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"Table"}); //得到所有sheet的名字
string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
string sql = string.Format("SELECT * FROM [{0}],firstSheetName); //查询字符串
OleDbDataAdapter ada =new OleDbDataAdapter(sql,connstring);
DataSet set = new DataSet();
ada.Fill(set);
return set.Tables[0];

}
}


///<summary>
///读取csv格式的Excel文件的方法
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
private DataTable ReadExcelWithStream(string path)
{
DataTable dt = new DataTable();
bool isDtHasColumn = false; //标记DataTable 是否已经生成了列
StreamReader reader = new StreamReader(path,System.Text.Encoding.Default); //数据流
while(!reader.EndOfStream)
{
string meaage = reader.ReadLine();
string[] splitResult = message.Split(new char[]{','},StringSplitOption.None); //读取一行 以逗号分隔 存入数组
DataRow row = dt.NewRow();
for(int i = 0;i<splitResult.Length;i++)
{
if(!isDtHasColumn) //如果还没有生成列
{
dt.Columns.Add("column" + i,typeof(string));
}
row[i] = splitResult[i];
}
dt.Rows.Add(row); //添加行
isDtHasColumn = true; //读取第一行后 就标记已经存在列 再读取以后的行时,就不再生成列
}
return dt;
}

 

相关文章

  • .Net页面局部更新引发的思考

    .Net页面局部更新引发的思考

    这篇文章主要是由.Net页面局部更新引发的一系列思考,整理了实现局部更新的解决方案及改进方案,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • ASP.NET三层架构详解 如何实现三层架构

    ASP.NET三层架构详解 如何实现三层架构

    这篇文章主要为大家详细介绍了ASP.NET三层架构,如何实现三层架构,本文为大家揭晓,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • asp.net微软图表控件使用示例代码分享

    asp.net微软图表控件使用示例代码分享

    这篇文章主要介绍了asp.net微软图表控件使用示例代码,有需要的朋友可以参考一下
    2013-12-12
  • asp.net开发中常见公共捕获异常方式总结(附源码)

    asp.net开发中常见公共捕获异常方式总结(附源码)

    这篇文章主要介绍了asp.net开发中常见公共捕获异常方式总结,结合实例形式较为详细的分析了asp.net捕获异常的相关技巧,并提供了完整的实例代码供读者下载参考,需要的朋友可以参考下
    2015-11-11
  • jQuery调用WebService返回JSON数据及参数设置注意问题

    jQuery调用WebService返回JSON数据及参数设置注意问题

    .NET Framework 3.5的发布解决了WebService调用中json问题,本文将介绍jQuery调用基于.NET Framework 3.5的WebService返回JSON数据,感兴趣的朋友可以了解下,希望本文对你有所帮助
    2013-01-01
  • ASP.NET Core异常和错误处理(8)

    ASP.NET Core异常和错误处理(8)

    这篇文章主要为大家详细介绍了ASP.NET Core异常和错误处理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Asp.net的服务器推技术 (Server Push)

    Asp.net的服务器推技术 (Server Push)

    在以往的和服务器端通信技术中,我们多数使用的是AJAX轮询式访问,也就是在Javascript中控制时间间隔,然后每隔一段时间就访问一次服务器,然后获得数据或通知。但是这种轮询方式的访问有90%是在做无用功。
    2010-01-01
  • .NET桥接模式讲解

    .NET桥接模式讲解

    这篇文章主要为大家详细介绍了ASP.NET桥接模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 页面编码codepage=936和65001的区别

    页面编码codepage=936和65001的区别

    这篇文章主要介绍了页面编码codepage=936和65001的区别,需要的朋友可以参考下
    2015-07-07
  • 用扩展方法优化多条件查询(不定条件查询)

    用扩展方法优化多条件查询(不定条件查询)

    在我们开发过程中,特别是管理系统的开发,经常会遇到多条件查询(或者叫不定条件查询)的案例,就是提供给User输入的查询条件有多个不同的查询栏位,而且,在实际使用中并不能确定User会使用哪些条件来当做搜索条件
    2012-12-12

最新评论