情境
SSIS Visual Studio 中的 Excel 來源、Excel 目的地 來讀取 Excel . xlsx 出現錯誤, 無法擷取連線管理員 'Excel 連線管理員, 導致無法選取 Excel 工作表;
觀念
現在企業大都把 Office 2003 升級到 Office 2010 , 2016 甚至 Office 2019. xls 和 xlsx 有何差異呢? 說明如下
- Excel 副檔名由 .xls 變成 .xlsx
- 版本不同
xls 是 Excel 2003及以前版本的格式
xlsx 是 Excel 2007及之後版本的格式
- 文件格式不同
xls 是一个特有的二進制格式,
xlsx 的核心结构是 XML 的結構,採用 XML 的壓縮方式占用空間更小。xlsx 最后 x 就是指 XML
- xls : 數據超出256列和65536行,會導致數據被截斷
xlsx : 數據可支援到 1,048,576 筆資料列, 16,384 資料行
Issue:
若 SSIS 中的 Excel 來源和 Excel 目的地元件. 若要讀取 Excel 2007後的 .XLSX 檔會出現” 無法擷取連線管理員 'Excel 連線管理員 “ 如下圖
出現” 無法擷取連線管理員 'Excel 連線管理員" 的錯誤訊息
無法擷取連線管理員 'Excel 連線管理員' 的資料表資訊。
無法使用連線管理員 'Excel 連線管理員' 連接到來源
Solution:
必須重新安裝 Microsoft Access Database Engine 2016 可轉換散發套件 , 讓 Excel 元件可以讀取 XLSX.
- 但由於 Excel 連線管理員 Microsoft.ACE.OLEDB.12.0 是 32 bit driver.
所以必須 安裝Microsoft Access Database Engine 2016 可轉換散發套件(32 bit) 才行, 64 bit driver 會無法使用
- 我的電腦是 office 64 bit , 若安裝 Microsoft Access Database Engine 2016 可轉換散發套件(32 bit) 才行, 郤又叫我要 uninstall office 64 bit , 但我又要用 office 64 bit.
安裝 Microsoft Access Database Engine 2016 可轉換散發套件(32 bit) 會出現此錯誤
以上 1. 2 點是衝突的. 所以上網找, 終於找到解決方式, 再此分享給大家, 節省大家的時間.
解決方法如下:
- 下載 Microsoft Access Database Engine 2016 可轉散發套件 ( 32 bit )
https://www.microsoft.com/zh-tw/download/details.aspx?id=54920
選擇 accessdatabaseengine.exe <- 注意要選這個, 不能選 X64.exe 喔
注意:您必須先使用 [控制台] 中的 [新增/移除程式] 將舊版 Access 資料庫引擎從您的電腦移除,才能安裝此下載項目。
- 打開 Dos Command
- cd 到 你下載 Microsoft Access Database Engine 2016 可轉散發套件 ( 32 bit ) 的資料夾
- 若是 Microsoft Access Database Engine 2016 可轉散發套件:
accessdatabaseengine.exe /quiet
/quiet 就是告訴系統, 不要問 32bit 還是 64 bits , 裝就對了.
- 若是Microsoft Access Database Engine 2010 可轉散發套件 :
accessdatabaseengine.exe /passive
4. 把 registry Key
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\Files Paths 中的 mso.dll 改名或者刪除. 就可以
5. 測試 SSIS 中的 Excel 來源、Excel 目的地 , 就可以正確讀取 xlsx 檔案了
SSIS 中的 Excel 來源 就可以正確讀取 xlsx 檔案
以上就是我的分享. 若對你有幫助, 請在下面 按讚、留言. 或 愛心符號. 你的肯定, 是我撰寫的動力.
Phoenix 鳳哥