C#读取Excel
using System; using System.Data; using System.Data.OleDb; namespace ExcelHelp { /**//// <summary> /// ExcelHelper Excel 操作助手。 /// 主要用于实现从 Excel 文件(.xls 格式)形式的数据源中读取以及写入数据。 /// </summary> public class ExcelHelper { 构造函数、私有实用方法#region 构造函数、私有实用方法 /**//// <summary> /// 由于此类仅提供一些静态方法,设置默认构造函数私有化,以阻止使用 "new" 来创建实例。 /// </summary> internal ExcelHelper() { // Do Nothing! } #endregion 构造函数、私有实用方法 静态方法#region 静态方法 获取 连接对象 GetExcelConnection#region 获取 连接对象 GetExcelConnection strFullPath, isTreatedHeader, intIMEXMode#region strFullPath, isTreatedHeader, intIMEXMode /**//// <summary> /// 获取 Excel 连接对象。 /// </summary> /// <param name="strFullPath">文件的完全路径</param> /// <param name="isTreatedHeader">是否处理表头</param> /// <param name="intIMEXMode">输入输出模式。1:设置输入为文本 Text 类型,通常使用该值。0/2:设置输入为 多数 Majority 类型,此设置极易导致数据缺失发生。</param> /// <returns>Excel 连接对象</returns> public static OleDbConnection GetExcelConnection( string strFullPath, bool isTreatedHeader, int intIMEXMode ) { string connectionString = @" Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties='Excel 8.0;HDR={1};IMEX={2};' "; string strTreatedHeader = string.Empty; if( isTreatedHeader ) strTreatedHeader = "Yes"; else strTreatedHeader = "No"; connectionString = string.Format( connectionString, strFullPath, strTreatedHeader, intIMEXMode ); return new OleDbConnection( connectionString ); } #endregion strFullPath, isTreatedHeader, intIMEXMode #endregion 获取 连接对象 GetExcelConnection ExecuteDataTable#region ExecuteDataTable /**//// <summary> /// 读取给定连接给定表的内容至 DataTable。 /// </summary> /// <param name="cn">给定连接</param> /// <param name="sheetName">给定 WorkSheet 的名称</param> /// <returns>包含给定 Sheet 数据的 DataTable</returns> public static DataTable ExecuteDataTable( OleDbConnection cn, string sheetName ) { DataTable dt = null; if( sheetName.Trim() != string.Empty ) { string commandText = string.Format( "SELECT * FROM [{0}$]", sheetName ); dt = new DataTable( sheetName ); OleDbDataAdapter da = new OleDbDataAdapter( commandText, cn ); da.Fill(dt); } return dt; } #endregion ExecuteDataTable ExecuteDataSet#region ExecuteDataSet /**//// <summary> /// 读取给定连接中全部或给定表的内容至 DataSet。 /// </summary> /// <param name="cn">给定连接</param> /// <param name="sheetNames">[可选参数]指定表名 的 sheet</param> /// <returns>包含全部或给定 Sheet 数据的 DataSet</returns> public static DataSet ExecuteDataSet( OleDbConnection cn, params string[] sheetNames ) { DataSet ds = new DataSet(); DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, null, "TABLE"}); string queryString; // 带 $ 的表名 string fullTableName; // 不带 $ 的表名 string realTableName; OleDbDataAdapter odda = new OleDbDataAdapter(); foreach ( DataRow dr in schemaTable.Rows ) { fullTableName = dr["TABLE_NAME"].ToString(); realTableName = fullTableName.Remove( fullTableName.Length - 1, 1 ); // 根据给定表导入 if ( sheetNames.Length > 0 ) { // 若当前表不在给定表数组中,则不填充到数据集中。 if ( Array.IndexOf( sheetNames, realTableName ) < 0 ) { continue; } } queryString = string.Format( "SELECT * FROM [{0}]", fullTableName ); odda.SelectCommand = new OleDbCommand( queryString, cn ); odda.Fill(ds, realTableName); } return ds; } #endregion ExecuteDataSet #endregion 静态方法 } }
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jlgxy/archive/2007/04/11/1560475.aspx