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 静态方法

    }
}

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/jlgxy/archive/2007/04/11/1560475.aspx

转载于:https://www.cnblogs.com/canyan3073/articles/1805151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值