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 静态方法
}
}
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/jlgxy/archive/2007/04/11/1560475.aspx