開篇介紹
碰到有幾個朋友問到這個問題,比較共性,就特意寫了這篇小文章說明一下如何實現在 SSIS 中導出數據到 Office Excel 2013 中。通常情況下 2013 以前的版本大多沒有問題,但是到 2013 就可能在建立連接管理器的時候出現鏈接失敗。
建議在看這一篇文章之前,如果有導出數據到 Excel 2013 的需求,請先參看我的另外一篇文章 - SSIS 系列 - 通過 OLE DB 連接訪問 Excel 2013 以及對不同 Sheet 頁的數據處理 。先按照這篇文章實際做一遍,安裝所需要的驅動,等成功實現了,那么這里的數據導出就非常的簡單。
案例講解
假設你已經按照上面這篇文章安裝好了驅動,並能成功加載數據到數據庫中,那么下面將介紹如何在 SSIS 中將數據導出到 Office Excel 2013 中。只有這個驅動安裝好了,下面在連接到 Excel 2013 文件的時候才不會出現報錯信息。
我的測試數據源,大概有1W8K 多行數據。
先建好這個 Excel 文件,並且最好指定好 Sheet 頁的名稱 Customer;在第一行的位置指定好列標題,即需要被導出的列名稱。其實這個很好理解,之所以這么提前創建好,是因為它具備一定的格式,像一個小數據庫表一樣有行和列的概念。
數據源的連接就不再提了,選擇好 Excel Destination。
在 Excel Connection Manager 處選擇新建一個鏈接管理器,選擇好目標 Excel 並勾選中第一行是列標題。
這時就能看到剛才創建好的 Sheet 列名稱了。
然后是列的 Mapping 關系,這樣就類似於數據源對數據源,表對表,列對列就全部建立好對應關系了。
保存並執行包,有 18484 條數據導出了。
包執行的同時,Excel 的數據就已經在自動增長了,檢查一下條數也是正確的。
所以如果是連接的問題,可以認真參照這一篇文章 - SSIS 系列 - 通過 OLE DB 連接訪問 Excel 2013 以及對不同 Sheet 頁的數據處理 安裝好驅動,以及要注意安裝的是32位版本。
另外一個問題,可能有人在問可不可以在導出的時候創建這個文件,Excel 不需要實現存在,這個能不能實現? 包括自動創建 Sheet 名稱以及列名稱。
我沒有實際操作過,因為從安裝驅動的時候就可以看出它實際上給出的驅動是關於 Access 的驅動,也就是說這里的 Excel 相當於一個小型的數據庫,Sheet 就是表。我們的數據導入導出都需要從數據源到數據源的對應,表對表的對應,列到列的對應,因此這些文件以及表名應該事先定義好。
可不可以動態創建 Excel,然后再導出數據 - 可以。
可以先通過 Script Task C#腳本創建好 Excel 文件,包括 Sheet 名和列名,然后再導出數據到 Excel 文件中去的。Excel 文件名稱是按時間+表名命名的,每天都導出一個,所以在程序中創建,就不用手工創建了。
更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。