.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; } }}
- .NET读取Excel文件内容
- .net程序直接读取Excel文件内容
- 读取Excel文件内容
- 读取excel文件内容
- .NET读取Office文件内容(word、excel、ppt)
- ASP.NET(C#)读取Excel的文件内容
- ASP.NET(C#)读取Excel的文件内容
- .net 读取Excel文件
- java读取EXCEL文件内容
- java 读取excel文件内容
- Android读取excel文件内容
- Java读取Excel文件内容
- PHP读取Excel文件内容
- js读取excel文件内容
- java读取Excel文件内容
- PHP读取Excel文件内容
- Java 读取excel 文件内容
- java 读取excel文件内容
- mds
- 尽可能使用堆栈变量(转)
- 防止页面被客户端缓存
- php的memcached
- JSValidation 验证框架的使用
- .NET读取Excel文件内容
- 决定了!
- flex素材背景的重复
- 杂谈
- JSValidation 验证框架的使用---方法
- 用到的Vim插件
- SMARTY缓存技术
- S3C6410禁用和启用触摸屏
- SOCKET编程进阶之Overlapped IO完成例程模型