從外部資料庫驅動程式產生的非預期的錯誤 (1)

從 C# 程式匯出資料到 Excel 的方式,大部份都會採用 OLEDB 來跟 Excel 進行介接;然而,突然接到使用者提問為何會出這個錯誤訊息,資料已經無法再匯出。程式都沒有修改,原本以為是個案電腦內的 Microsoft Office 問題 。卻陸續接獲使用者回報這個錯誤訊息;幾經追查之下發現,原來 Microsoft 公司在 2017-10-12 發布以 KB40416 開頭的更新檔,將已發現的 Microsoft JET Database Engine 安全性問題修補,然而此次的修補後會造成新建立或開啟 Microsoft EXcel (*.xls) 檔案失敗,其錯誤訊息為 Unexpected error from external database driver(1). (Microsoft JET Database Engine)。

針對這個問題,Microsoft 給的解決方案是:

  1. 下載及安裝 Microsoft Access Database Engine 2010 Redistributable
  2. 將 Connect String 由 JET 改為 ACE
    Ex: Provider=Microsoft.Jet.OLEDB.4.0 改成 Provider=Microsoft.ACE.OLEDB.12.0

官方參考資料:https://support.microsoft.com/en-us/help/4041681/windows-7-update-kb4041681

有些網友則選擇直接將 KB4041681 (for Windows7)、KB4041678 (for Windows7)、KB4041676(for Windows10)、KB4041693 (for Windows8) 移除後,就能正常運作。

以上無論是移除更新檔還是將 Connection String 改成 ACE,對我的程式來說都是無效。只好改找其它的方案。後來找到 E-ICEBLUE 的產品 Spire.XLS開源碼專案 NPOI,都是可以不依賴 Microsoft 的 DB Engine 而直接產生相關文件。參考過相關的文件發現 Spire.XLS 的使用相對簡單,所以將全部的專案重新以 Spire.XLS 重新撰寫。

E-ICEBLUE 有提供自由使用版本 (FreeSpire.xls),但卻有最多產生 5 個頁籤(Sheet)、每個頁籤內最多 200 列資料的限制。

產生後的 Excel 檔案。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *