首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

C# 連接 Excel 2003 (.xls) 與 2007+ (.xlsx) 連接字串完整指南:Provider、ACE 引擎、IMEX、HDR 參數詳解

     編輯:關於SqlServer

核心差異:OLE DB Provider 版本不同

Excel 版本副檔名ProviderExtended Properties
Excel 2003.xlsMicrosoft.Jet.OLEDB.4.0Excel 8.0;HDR=Yes;IMEX=1
Excel 2007/2010/2013/2016/2019/365.xlsx/.xlsm/.xlsbMicrosoft.ACE.OLEDB.12.0Excel 12.0;HDR=Yes;IMEX=1

C# 自動判斷副檔名產生連接字串


string fileExt = Path.GetExtension(excelPath).ToLower();
string connStr;

if (fileExt == ".xls")
{
    connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelPath + 
              @";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
}
else // .xlsx, .xlsm, .xlsb
{
    connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + 
              @";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
}

關鍵參數解析

參數值說明
HDRYes / No第一列是否為標題列。Yes = 欄位名來自第一列;No = 自動產生 F1, F2...。
IMEX0 / 1 / 2混合資料類型匯入模式。
0 = 僅匯出(預設)
1 = **匯入混合模式**(掃描前 8 列決定型別,**建議讀取時必設 1**)
2 = 匯出模式(連結模式)
Excel 8.0 / 12.0版本標識對應 Jet/ACE 引擎的 Excel 格式版本,不可任意修改。

ACE 引擎安裝(64 位元環境必裝)

64 位元 OS + 64 位元 Office/無 Office 環境,**必須安裝 64 位元 ACE 引擎**,否則會出現「未在本機電腦上註冊 'Microsoft.ACE.OLEDB.12.0' 提供者」錯誤。

  • 下載:Microsoft Access Database Engine 2010 Redistributable (x64)
  • 或安裝 2016/2019 版 ACE(支援更新格式)。
  • ⚠️ **不能同時安裝 32 位元與 64 位元 ACE**,需與應用程式編譯目標平台一致(Any CPU + Prefer 32-bit = 需 32 位元 ACE;純 64 位元 = 需 64 位元 ACE)。

進階技巧:ACE 可相容讀取 .xls

Microsoft.ACE.OLEDB.12.0 **支援讀取 .xls 與 .xlsx**,若環境已裝 64 位元 ACE,可**統一使用 ACE 連接字串**簡化程式碼:


string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + 
                 @";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";

測試確認可正常讀取 .xls 後,即可移除 Jet 判斷邏輯。

常見錯誤與解決

錯誤訊息原因解決
「未註冊 Provider」缺少 ACE/Jet 引擎安裝對應位元數的 Access Database Engine
「外部資料表不是預期的格式」副檔名與 Provider 不符(如 .xlsx 用 Jet)依副檔名選正確 Provider
數值欄位讀出 NULL前 8 列為文字,後為數值,IMEX=0設定 IMEX=1,或在登錄 TypeGuessRows=0 掃描全表
日期格式錯誤Excel 儲存為數值序號,轉換邏輯缺失讀取後用 DateTime.FromOADate(doubleVal) 轉換

結語

掌握「.xls → Jet 4.0、.xlsx → ACE 12.0、IMEX=1 讀取混合型別、ACE 64 位元必裝**」四大鐵律,即可在 C# 中穩健連接各版本 Excel。建議專案統一升級至 ACE 12.0(支援雙格式),並將連接字串封裝為工具方法,集中管理 Provider、路徑、參數,降低維運複雜度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved