Microsoft SSMS之Excel資料匯出功能錯誤的解決方式

這個大概是最多開發者對微軟不滿的點,這個BUG存在我看快10年有了,一直都沒有解決。大致上就是你開啟了Microsoft SQL Server Management Studio後,要對某個資料表或檢視表進行EXCEL資料匯出時,會彈出錯誤訊息「Microsoft.ACE.OLEDB.XX.X」的錯誤,這個「XX.X」要看你匯出的EXCEL版本而定,從2010版的12.0~2016版的16.0都有可能出現。

我電腦的環境是Windows 10 x64、Office 2016 x64,亦安裝了Access 2016,而Microsoft SQL Server Management Studio的版本號已經來到v17.4(14.0.17213.0)。當我點選匯出Excel 2016格式的檔案時,它依然回報給我這個經典的錯誤:

'Microsoft.ACE.OLEDB.16.0'提供者並未登入於本機電腦上。(System.Data)

安裝Microsoft Access Database Engine Redistributable(可轉散發套件)

安裝這個套件是最終的解法,以前沒有變,現在也沒有變。現在的年度已經來到2018,我曾經想試著安裝新版(Microsoft Access Database Engine 2016 Redistributable)的套件,但是最終宣告失敗,裝完x86、x64兩個版本後,依然不能解決無法匯出Excel 2016格式的問題。

如果你真的有興趣裝看看Microsoft Access Database Engine 2016 Redistributable,之前網路流傳的/passive安裝模式已經無效,要改使用/quiet安裝模式,否則你會卡在x64 Office不可以安裝x32套件的問題。

最終的解決方案,還是回到骨董級的「安裝Microsoft Access Database Engine 2010 Redistributable(可轉散發套件)」,但這樣的解法必須要有下列的配套措施。

  1. 安裝x86(32位元)就好,不要安裝x64(64位元版本)。
  2. 必須使用CMD模式,到命令列中使用「/passive」安裝,解決x86無法安裝的問題。
  3. 選擇匯出Excel時,必須挑選到Excel 2010版本格式就好,不要再往下選。
  4. 若遇到欄位存在著大量換行內文的情況,這時候到Excel有極高的機率會出現失敗,建議先拋轉到Access格式,再用Access 2016內建的功能轉匯出至Excel即可(或者是轉換成舊版的Excel.xls也可以有一定程度的規避錯誤)。

※補充:最好笑的是,Access從2007開始改版檔案格式成為「.accdb」檔案,你安裝了Microsoft Access Database Engine 2016 Redistributable以為SSMS選單多了「Microsoft Access (Microsoft.ACE.OLEDB.16.0) 」選項,就可以開始支援寫入.accdb檔案。但是你錯了,它還是只能讀寫「.mdb」,如果你時間多的話可以試看看。

相關連結

後記補充說明

近期把電腦重灌至SSMS 18.12.1 + Offfice 365(64Bit)+ Microsoft Access Database Engine 2016 Redistributable(64Bit),時至今日(20220713)仍然發生SQL Server匯入和匯出精靈進行EXCEL檔案匯出失效的問題 (Microsoft.ACE.OLEDB.16.0找不到) ,推測原因應該是SSMS的匯入精靈仍然想要調用32Bit的ACE引擎所致(但目前電腦已經是Office 64Bit所以不給安裝32Bit ACE引擎),經過下載32Bit ACE引擎後進入Console使用/passive安裝模式閃過32Bit阻擋後,再重開機在進入SSMS測試,果然可以順利匯出成Excel 2016版格式,特此紀錄。

MicrosoftAccessDatabaseEngine x86 x64 2010 2016 Export Error Bug Failure xls xlsx