2017-04-10 107 views
1

我有一個簡單的SSIS包。從數據庫提取數據,加載到.xls文件中,然後使用sp_send_dbmail任務通過電子郵件發送給用戶。我有幾個不同的報告我爲此執行此任務。現在問題是我需要在發送給用戶之前爲這些文件添加密碼。我可以通過兩種方法來實現:手動密碼保護模板並在SSIS中加載文件,或者在SSIS中加載和密碼保護文件(兩者)。 SSIS有限制,它無法打開受保護的文件,也無法保護文件作爲任務。這裏有一些方法我的研究,我可以這樣做:如何使用SSIS保護或打開受保護的excel文件

  1. Excel的互操作通過腳本任務:在大量的研究,我發現它不是最好的做法,因爲它會導致很多的服務器問題,需要許可等等我放棄了這個想法。
  2. OpenXML通過腳本任務:它只適用於.xlsx,但我有.xls文件,我只能使用.xls
  3. Excel宏:我創建了一個宏,它完全保護文件,但問題出現在如何執行此操作。經研究發現,它可以使用Interop執行。
  4. 寫一個批處理文件,將執行Excel宏:我還沒有真正找到解決方案如何使用批處理文件運行它們(如果它甚至可能)
  5. 使用PowerShell保護文件,然後執行它們在SSIS中執行處理任務。我不熟悉PowerShell,但我已經研究並發現它是可能的。

我已經做了大量的研究,我無法找到一個正確的解決方案。我的知識僅限於SQL。任何建議將不勝感激,謝謝!

+0

根據宏是多麼複雜,我將其轉換爲VBScript和運行一個VBScript,但你可以實現使用PowerShell同樣的事情。但是你必須在服務器上安裝excel。你應該首先確認這是否是一個問題 –

+0

@ Nick.McDermaid爲了轉換和使用VB中的excel文件我需要使用Excel Interop。宏沒有互操作的原因是因爲它是Excel本身的一部分,並且不需要互操作來進行通信。我確實在服務器上安裝了Excel,但它是舊的,所以只有.xls可以工作。我們現在不會更新excel,因爲我們有很多使用excel的進程運行,我們將不得不修改所有這些進程。 PowerShell是我一直在研究的內容,但沒有太多關於它的信息或者關於如何解決這個問題的例子。 – Stephanie

+0

如果您從.net調用COM,則只需要使用excel interop。 VBScript不是.net,所以在這種情況下你不需要它。 –

回答

2

正常加載文件,然後使用powershell腳本或宏(不知道這是否可能)鎖定它。鎖定和解鎖對於SSIS來說是外部的,所以最好用某種腳本語言來處理,比如PowerShell。閱讀本

Lock Unlock excel files using PS script

+0

謝謝,上面提到我寫了一個excel宏,它工作正常,我只是不知道如何執行在SSIS中的宏我還談到了PowerShell,我也不熟悉如何執行或創建一個PowerShell文件,它是一個文本文件嗎? – Stephanie

+0

不可能在SSIS中運行一個宏,因爲你特別需要另一方面,我認爲從執行進程任務中調用它可能很有幫助,並且探索將宏作爲進程任務的參數運行的選項。 – rvphx

+0

powershell是以擴展名.ps結尾的腳本。探索一下,解決很多問題都會對解決很多問題很有幫助,這些問題都超出了SSIS領域的範圍 – rvphx