/// <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 excelPath, bool includeHeader, int IMEXMode )
{
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1};IMEX={2};'";
connectionString = string.Format( connectionString, excelPath, includeHeader ? "YES" : "NO", IMEXMode );
return new OleDbConnection( connectionString );
}
/// <summary>
/// 從Excel中讀取數據
/// </summary>
/// <param name="filePath">文件路徑</param>
/// <param name="includeHeader">是否包含列信息,(第一行作爲列)</param>
/// <returns>excel包含的數據集</returns>
public static DataSet ReadExcel2DataSet(string filePath,bool includeHeader)
{
OleDbConnection connection = GetExcelConnection( filePath , includeHeader , 1 );
try
{
connection.Open();
DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand();
adapter.SelectCommand.Connection = connection;
DataSet excelData = new DataSet();
for( int i=0; i< schemaTable.Rows.Count; i++)
{
DataRow dr = schemaTable.Rows[i];
adapter.SelectCommand.CommandText = string.Format("SELECT * FROM {0}", dr["TABLE_NAME"].ToString().Trim('/''));
adapter.Fill(excelData);
excelData.Tables[i].TableName = dr["TABLE_NAME"].ToString();
}
return excelData;
}
catch
{
throw;
}
finally
{
if(connection != null)
{
connection.Close();
}
}
}
【備註】:
HDR=Yes 是說Excel文件的第一行是列名而不是數據;HDR=No 正好與前面的相反。
IMEX=1 輸入輸出模式。1:設置輸入爲文本 Text 類型,通常使用該值。0/2:設置輸入爲 多數 Majority 類型,此設置極易導致數據缺失發生。
如果連接時報錯:"外部表不是預期的格式" 請參照下面的連接字符串進行修正:
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + Server.MapPath("ExcelFiles/MyExcelFile.xls") + ";Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'"; //此連接只能操作Excel2003(.xls)文件
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + Server.MapPath("ExcelFiles/Mydata2007.xlsx") + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; //此連接可以操作.xls與.xlsx文件 (支持Excel2003 和 Excel2007 的連接字符串)
所以請根據自身的Excel版本選擇對應的連接字符串。