SSIS-動態變換excel檔名並匯入資料

動態變換excel檔名並匯入資料

有網友說想要依照日期變更excel目的地檔名來匯sql server的資料到excel

這個目前也是用ssis實作出來了,過程其實還蠻簡單的

step1:先實作一個單純的匯入excel的資料流程工作

image

step2:以上的excel目的地先指定好位置

SNAGHTML4af4ab

這樣做完只是單一個固定的檔名。接下來我們就可以利用這個做好的excel目的地來當範本excel

我為了方便demo用,我先將該檔案都放在c:下,另外我為了demo檔名會變動,所以我使用了for迴圈這個元件

當然一般做排程的話是不用for迴圈,我只是為了模擬excel檔名變動的部份

step3:拉一個for迴圈

image

step4:宣告一個變數 i

image

step5:編輯for迴圈的內容,我只讓迴圈跑2號,確定檔名會變即可

image

step6:接下來拉一個指令碼工作,這裡就是重點,從這裡動態改變excel檔名

image

step7:再宣告一個變數,這個變數是要存放excel目的地名稱的,你可以先放預設值,一定要寫哦!不要空白,先指定一個確定存在的檔名及路徑

可以直接先指定先前做好的tempexcel檔

image

step8:接下來編輯for迴圈容器中的指令碼工作元件,我使用vb語法,並將我的 i 變數傳入當作檔名之一

,最後產生的excel檔名會寫到targetexcel這個變數內容,輸入完後點編輯指令碼

SNAGHTML54647e

step9:以下為動態產生檔名的程式碼

		   1: '下面這個tempfile的內容我目前是寫死在程式碼中,當然這也是可以變動,就舉一反三囉
		   2:        Dim tempfile As String = "c:\testexcel.xls"
		   3:        '先判斷範本excel是否存在
		   4:        If File.Exists(tempfile) Then
		   5:            '如果存在的話,組excel檔名用年月日+i
		   6:            Dim newfile As String = String.Format("c:\{0}_{1}.xls", System.DateTime.Now.ToString("yyyyMMdd"), Dts.Variables("i").Value.ToString())
		   7:            '複製一份
		   8:            File.Copy(tempfile, newfile)
		   9:            '寫到變數中
		  10:            Dts.Variables("targetexcel").Value = newfile
		  11:        End If

step10:接下來拉一個資料流程工作

image

step11:在這個資料流程工作中一樣拉來源及目的地excel

image

step12:接下來點excel目的地,選擇新增

image

step13:這時候excel檔案路徑一樣可以先填入範本excel的檔名及位置

SNAGHTML5ba055

step14:接下來選擇資料來源區的excel連接管理員1,來變動他的excelfilepath

image

step15:選擇excelfilepath的屬性後,點運算式旁按鈕

image

step16:將targetexcel這個變數拖曳下來

SNAGHTML5ee2f0

step17:好了,執行看看吧

image

結果內容

image

image

ps:範本excel記得要把除了標題欄以下的欄位做清除內容及刪除的動作,不然所匯入的資料會變成

在更下方,因為excel會記錄之前資料的位置會用append的方式寫入

‧覺得文章不錯請給我一個『讚』作為鼓勵喔!