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

SSIS 讀取 Excel (.xlsx) 完整指南:OLE DB 連接配置、ACE 驅動安裝、多 Sheet 合併/分流加載策略

     編輯:關於SqlServer

核心難點

SSIS 內建 Excel Source 僅支援舊版 `.xls` (Jet 4.0),不支援 `.xlsx`。需用 OLE DB Source + Microsoft ACE OLE DB 12.0/16.0 Provider 繞過限制。

驅動安裝與配置

  1. 下載安裝 Microsoft Access Database Engine 2016/2019 Redistributable (AccessDatabaseEngine_X64.exe)
    注意:與 Office 位數一致 (64位 Office 裝 64位 ACE),否則 SSIS 64位運行報錯
  2. SSIS 專案 → 連接管理器 → 新建 OLE DB 連接:
    • 提供程序:Microsoft Office 12.0/16.0 Access Database Engine OLE DB Provider
    • 數據源:Excel 文件完整路徑
    • 擴展屬性:`Excel 12.0 Xml;HDR=YES;IMEX=1`
  3. 測試連接 → 選擇 Sheet (如 `Sheet1$`)

關鍵連接字符串參數

參數說明建議值
HDR首行是否列名YES
IMEX混合類型導入模式1 (強制文本模式,避免類型推斷錯誤)
TypeGuessRows掃描行數決定類型0 (掃描所有行) 或 註冊表修改
ReadOnly只讀模式True (避免鎖定文件)

四大加載場景實現

1. 多 Sheet 合併到同一表 (結構相同)

-- 方案 A: Foreach 文件枚舉器 (文件級) + Foreach ADO 枚舉器 (Sheet 級)
-- 方案 B: Script Task 獲取所有 Sheet 名 → 物件變量 → Foreach ADO 遍歷
-- 數據流內:OLE DB Source (動態 Sheet 名) → 目標表

2. 多 Sheet 分流到不同表 (結構不同)

  • 預置每 Sheet 對應的數據流任務
  • Foreach 遍歷 Sheet 名 → 表達式約束匹配 → 執行對應數據流

3. 動態 Sheet 名 (參數化)

-- 連接管理器屬性 "ExcelFilePath" + "OpenRowset" 由變量驅動
-- 變量 @SheetName 通過表達式: "[" + @SheetName + "$]"

4. 大數據量優化

  • Fast Load (OLE DB 目標) + 批次 10000 + TABLOCK
  • 預先建表、禁用索引/約束、載入後重建
  • 64 位運行模式 (專案屬性 → Run64BitRuntime = True)

常見錯誤與修復

錯誤原因修復
'Microsoft.ACE.OLEDB.12.0' provider is not registered未裝 ACE / 位數不匹配裝對應位數 ACE、專案 Run64BitRuntime 對齊
External table is not in the expected format文件非 .xlsx / 損壞確認副檔名、用 Excel 另存為
Sheet 名稱含空格/特殊字符引用格式錯誤用 `['Sheet Name$']` 包裹

OLE DB 提供程序列表 連接管理器配置

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