Excel读取操作

Excel读取方式

用OleDb 方式去读取Excel速度还是非常的快的,但这种方式读取数据的时候不太灵活,不过可以在 DataTable 中对数据进行一些删减修改.
这种方式将Excel作为一个数据源,直接用Sql语句获取数据了。所以读取之前要知道此次要读取的Sheet

if (fileType == ".xls")
    connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
else   
    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; 
OleDbConnection conn new OleDbConnection(connStr); 
DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

以上是读取Excel的Sheet名,xls和xlsx的连接字符串也不一样的,可以根据文件的后缀来区别。这里需要注意的一点,Excel里面只有一个Sheet,但通过这种方式读取Sheet可能会大于一个(有一个无效sheet,sheetName中包含$符号).

using System.Data; - 使用.Net Framework 4.0或者4.5架构时均可引用.目标架构在解决方案,属性修改中..命名空间下还包含– System.Data.OleDb;用于访问OLE DB

OleDbConnection - 数据源连接路径配置 - string类型
//Excel 2007前:Provider=Microsoft.Jet.OLEDB.4.0
//Excel 2010:Provider=Microsoft.ACE.OLEDB.12.0; Excel 8.0或者Excel 12.0均可
//HDR=Yes - 首行不为数据;
//HDR=No - 首行为数据;默认HDR为Yes
//IMEX=0 - 输出模式;
//IMEX=1 - 输入模式;
//IMEX=2 - 链接模式(完全更新能力)

DataTable - 内存中的数据表.并非Excel文件或者Sheet. (注:DataTable像一个容器,用于装数据,而非指特定的表格) - 数据访问方式:行下标索引,列既可下标索引也可字段名访问.
Excel信息通过OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object [] { null, null, null, “Table” });要求式筛选后,返回DataTable获取.其中也只是Excel整体表格信息,所有信息存储在行列中.
Sheet信息通过OleDbDataAdapter.Fill(DataTable)后,再访问DataTable获取指定行列位置的数据.

DataSet - 内存中的数据缓存.

Excel 读取操作

public static DataSet ToDataTable(string filePath) 
 { 
     string connStr = "";             
     string fileType = System.IO.Path.GetExtension(fileName); 
     if (string.IsNullOrEmpty(fileType)) return null; 

     if (fileType == ".xls") 
         connStr = "Provider=Microsoft.Jet.OLEDB.0;" + "Data Source=" + filePath+ ";" + ";Extended Properties=\"Excel 0;HDR=YES;IMEX=\""; 
     else
         connStr = "Provider=Microsoft.ACE.OLEDB.0;" + "Data Source=" + filePath+ ";" + ";Extended Properties=\"Excel 0;HDR=YES;IMEX=\""; 
     string sql_F = "Select * FROM [{0}]"; 

     OleDbConnection conn = null; 
     OleDbDataAdapter da = null; 
     DataTable dtSheetName= null; 

     DataSet ds = new DataSet(); 
     try
     { 
         // 初始化连接,并打开 
         conn = new OleDbConnection(connStr); 
         conn.Open(); 

         // 获取数据源的表定义元数据                         
         string SheetName = ""; 
         dtSheetName= conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 

         // 初始化适配器 
         da = new OleDbDataAdapter(); 
         for (int i = 0; i < dtSheetName.Rows.Count; i++) 
         { 
             SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"]; 

             if (SheetName .Contains("$") && !SheetName .Replace("'", "").EndsWith("$")) 
             { 
                 continue; 
             } 

             da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName ), conn); 
             DataSet dsItem = new DataSet(); 
             da.Fill(dsItem, tblName); 

             ds.Tables.Add(dsItem.Tables[0].Copy()); 
         } 
     } 
     catch (Exception ex) 
     { 
     } 
     finally
     { 
         // 关闭连接 
         if (conn.State == ConnectionState.Open) 
         { 
             conn.Close(); 
             da.Dispose(); 
             conn.Dispose(); 
         } 
     } 
     return ds; 
 }

优缺点

优点:读取方式简单、读取速度快
缺点:除了读取过程不太灵活之外,这种读取方式还有个弊端就是,当Excel数据量很大时。会非常占用内存,当内存不够时会抛出内存溢出的异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值