Sample Excel Data
Sample Code
// 必須加入該命名空間
using System.Data.OleDb;
namespace XLSByOleDB
{
class Program
{
static void Main(string[] args)
{
string FileFullName = @"D:\XlsDemo.xlsx";
string ExcelConnectionString = GetExcelConnectionString(FileFullName);
DataTable sheetsInfo = GetExcelSheetNames(ExcelConnectionString);
string sheetName;
foreach (DataRow sheet in sheetsInfo.Rows)
{
sheetName = sheet["Table_Name"].ToString();
// OR sheetName = sheet[2].ToString();
Console.WriteLine($"SheetName:{sheetName} 相關資料");
DataTable data = GetExcelData(ExcelConnectionString, sheetName);
foreach (DataRow row in data.Rows)
{
// 欄位1 為該 Sheet 第一筆資料,也就是欄位名稱
Console.WriteLine(row["欄位1"].ToString());
}
}
}
/// <summary>
/// 產生 Excel 檔案連線字串
/// </summary>
/// <param name="FileFullName">Excel 檔案完整路徑</param>
/// <returns>Excel 檔案連線字串</returns>
private static string GetExcelConnectionString(string FileFullName)
{
OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder
{
Provider = "Microsoft.ACE.OLEDB.12.0",
DataSource = FileFullName
};
string Extension = Path.GetExtension(FileFullName);
string ExcelVersion;
string XML;
if (Extension == ".xlsx")
{
ExcelVersion = "12.0";
XML = nameof(XML);
}
else
{
ExcelVersion = "8.0";
XML = string.Empty;
}
builder["Extended Properties"] = $"Excel {ExcelVersion} {XML};HDR=YES;IMEX=1";
return builder.ConnectionString;
}
/// <summary>
/// 抓取 Excel 內全部 Sheet
/// </summary>
/// <param name="connectionString">Excel 檔案連線字串</param>
/// <returns>Excel 內全部 Sheet</returns>
private static DataTable GetExcelSheetNames(string connectionString)
{
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
// OR
// DataTable dt = conn.GetSchema("Tables");
return dt;
}
}
/// <summary>
/// 取得指定 Sheet 內資料
/// </summary>
/// <param name="connectionString">Excel 檔案連線字串</param>
/// <param name="sheetName">指定 Sheet 名稱</param>
/// <returns>指定 Sheet 內資料</returns>
private static DataTable GetExcelData(string connectionString, string sheetName)
{
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
// Sheet名稱,必需用中括號 [] 包起來
string TSQL = $"SELECT * FROM [{sheetName}]";
OleDbDataAdapter da = new OleDbDataAdapter(TSQL, connectionString);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
}
結果重點紀錄
- 在 Microsoft Access Database Engine 2010 可轉散發套件 和 Microsoft Access Database Engine 2016 Redistributable 都有下列說明
- 在 Excel Connection String 內提到,可以利用 [Microsoft.ACE.OLEDB.12.0] 來存取 [97 - 2003] 格式
- 下面兩篇列為重點精華文章,主要是說明 Extended Properties 內的 IMEX 參數、TypeGuessRows 和 ImportMixedTypes 兩個機碼的重要性
- 參考資料
- C#讀取Excel的三種方式以及比較




![[SQL] 資料表提示-ReadPast-1](https://live.staticflickr.com/65535/49268085406_6b232202c0_z.jpg)
![[SQL] 資料表提示-NOLOCK-2](https://live.staticflickr.com/65535/49257249552_b1573e085d_z.jpg)
![[SQL] 資料表提示-NOLOCK-3](https://live.staticflickr.com/65535/49257053941_daa4ede3e5_z.jpg)
![[SQL] NOLOCK-1](https://live.staticflickr.com/65535/49256448613_d9a0e4bb3e_z.jpg)
![[VFP] Report Form - NoConsole 參數](https://live.staticflickr.com/65535/49191841362_eca5622a96_z.jpg)
![[VFP] GoFish - 完整檔案路徑-1](https://live.staticflickr.com/65535/49182218773_7ea15e8eb6_z.jpg)
![[VFP] GoFish - 完整檔案路徑-2](https://live.staticflickr.com/65535/49182218748_cfa21a6e2a_z.jpg)
![[VFP] GoFish - 完整檔案路徑-3](https://live.staticflickr.com/65535/49182920662_5cc4a092e8_z.jpg)


![[SQL] 無聯結述詞-1](https://live.staticflickr.com/65535/48993888081_5562396d3d_m.jpg)
![[SQL] 無聯結述詞-2](https://live.staticflickr.com/65535/48993905636_51278f882c_z.jpg)
![[SQL] Job Owner 權限-2](https://live.staticflickr.com/65535/48939902772_8e2d7f8288_z.jpg)
![[SQL] 執行 SQL Agent 權限-1](https://live.staticflickr.com/65535/48919236937_1181768d96_n.jpg)
![[SQL] 執行 SQL Agent 權限-2](https://live.staticflickr.com/65535/48919030226_27f4b7fe59_z.jpg)
![[SQL] 執行 SQL Agent 權限-3](https://live.staticflickr.com/65535/48919236847_d865aa13bd_n.jpg)
![[SQL] 執行 SQL Agent 權限-4](https://live.staticflickr.com/65535/48918502373_426d2dbdf0_z.jpg)
![[SQL] 執行 SQL Agent 權限-5](https://live.staticflickr.com/65535/48918546573_3c062b4e12_z.jpg)




![[SQL] 通用資料連結 (UDL) 設定-1](https://live.staticflickr.com/65535/48884957333_2d09e50b76_z.jpg)
![[SQL] 通用資料連結 (UDL) 設定-2](https://live.staticflickr.com/65535/48885675007_8b2bd8cced.jpg)
![[SQL] 通用資料連結 (UDL) 設定-3](https://live.staticflickr.com/65535/48885495781_3439365950_t.jpg)
![[SQL] 通用資料連結 (UDL) 設定-4](https://live.staticflickr.com/65535/48884957263_9ec2f58703.jpg)
![[SQL] 通用資料連結 (UDL) 設定-5](https://live.staticflickr.com/65535/48885495736_aaa7f61069_m.jpg)
![[VFP] Command Windows 字型大小-4](https://live.staticflickr.com/65535/48840659113_5a23f8a820_z.jpg)
![[VFP] Command Windows 字型大小-1](https://live.staticflickr.com/65535/48841200452_c29608b26b.jpg)
![[VFP] Command Windows 字型大小-2](https://live.staticflickr.com/65535/48841200422_0402b5ffe9_z.jpg)
![[VFP] Command Windows 字型大小-3](https://live.staticflickr.com/65535/48841026986_cc0e3ae87a_z.jpg)



![[VS] 變更 Tangible T4 Editor 背景顏色-1](https://live.staticflickr.com/65535/48769365613_8a19558b21_z.jpg)
![[VS] 變更 Tangible T4 Editor 背景顏色-2](https://live.staticflickr.com/65535/48769365573_fcd8fd5c13_z.jpg)
![[VS] 變更 Tangible T4 Editor 背景顏色-3](https://live.staticflickr.com/65535/48769365558_75f0cf8064.jpg)
![[VS] 變更 Tangible T4 Editor 背景顏色-4](https://live.staticflickr.com/65535/48769701816_577b6be357_z.jpg)
![[VS] 變更 Tangible T4 Editor 背景顏色-5](https://live.staticflickr.com/65535/48769365628_b3a4b379b6_n.jpg)
![[SQL] 複合索引效能 - 2](https://live.staticflickr.com/65535/48759936596_6b7f043ac9_z.jpg)
![[VS] 建構子快捷鍵-1](https://live.staticflickr.com/65535/48727131101_fbb7d786a0_z.jpg)
![[VS] 建構子快捷鍵-2](https://live.staticflickr.com/65535/48727131096_d1b1d1ac97_z.jpg)
![[VS] 建構子快捷鍵-5](https://live.staticflickr.com/65535/48727130891_b7745b1f9f_z.jpg)
![[VS] 建構子快捷鍵-3](https://live.staticflickr.com/65535/48727131026_6bb5a1c3cc_z.jpg)
![[VS] 建構子快捷鍵-4](https://live.staticflickr.com/65535/48727131006_3cceb0bce2_z.jpg)