.NET读取Excel文件内容

来源:互联网 发布:高中化学知识结构网络 编辑:程序博客网 时间:2024/05/22 12:10

    开发过程中难免会遇到读取Excel文件的情况,本文主要记录读取Excel文件的方法由于本文目的是供自己和各位童鞋日后学习参考,没有考虑过多方面,把所有方法及属性全部放到了一个文件中。

 

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

 

//Page_Load事件 注册按钮单击事件 protected void Page_Load(object sender, EventArgs e){    this.btnRead.Click += new EventHandler(btnRead_Click);}//按钮单击事件protected void btnRead_Click(object sender, EventArgs e){    string currFilePath = string.Empty; //待读取文件的全路径    string currFileExtension = string.Empty; //文件的扩展名    HttpPostedFile file = this.fileUpload.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);  //上传     DataTable dt = new DataTable();    if (this.currFileExtension == ".xlsx" || this.currFileExtension == ".xls")    {        dt = ReadExcelToTable(currFilePath,true);  //读取Excel文件(.xls和.xlsx格式)    }    else if (this.currFileExtension == ".csv")    {        dt = ReadExcelWithStream(currFilePath);  //读取.csv格式文件    }    GridView1.DataSource = dt;    GridView1.DataBind();}

 

using System;using System.Data;using System.Data.OleDb;using System.IO;namespace TAKATA{    public class readFile    {        ///<summary>        ///读取xls\xlsx格式的Excel文件的方法         ///</summary>        ///<param name="path">待读取Excel的全路径</param>        ///<param name="HDR">是否把首行作为标题</param>        ///<returns></returns>        public static DataTable ReadExcelToTable(string path, bool HDR)        {            string tit = "Yes";            if (!HDR)                tit = "NO";            //连接字符串            string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=" + tit + ";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>        ///读取xls\xlsx格式的Excel文件的方法         ///</summary>        ///<param name="path">待读取Excel的全路径</param>        ///<param name="HDR">是否把首行作为标题</param>        ///<param name="SheetName">sheet的名字</param>        ///<returns></returns>        public static DataTable ReadExcelToTable(string path, bool HDR, string SheetName)        {            string tit = "Yes";            if (!HDR)                tit = "NO";            //连接字符串            string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=" + tit + ";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的名字                SheetName = "" + SheetName + "{1}quot;;   //传递sheet的名字                string sql = string.Format("SELECT * FROM [{0}]", SheetName);  //查询字符串                     OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);                DataSet set = new DataSet();                ada.Fill(set);                return set.Tables[0];            }        }        ///<summary>        ///读取csv格式的Excel文件的方法         ///</summary>        ///<param name="path">待读取Excel的全路径</param>        ///<returns></returns>        public static 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 message = reader.ReadLine();                string[] splitResult = message.Split(new char[] { ',' }, StringSplitOptions.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;        }    }}

原创粉丝点击