2015-10-15 116 views
0

我使用OpenXML在SSIS包中使用C#生成Excel文件。SSIS C#OpenXML生成Excel文件失敗

我這樣做是因爲我們沒有在服務器上安裝Excel,所以這應該工作,無需安裝Excel。

本地工作,但轉移到PROD服務器時失敗。它是失敗的腳本任務,我收到此錯誤:

Executed as user: MI\SQLAgentAccount. Microsoft (R) SQL Server Execute  Package Utility Version 11.0.5058.0 for 64-bit Copyright (C) Microsoft Corporation. All rights reserved. Started: 10:46:49 AM Error: 2015-10-15 10:46:50.49  Code: 0x00000001  Source: Save To Excel Without Excel  Description: Exception has been thrown by the target of an invocation. End Error DTExec: The package execution returned DTSER_FAILURE (1). Started: 10:46:49 AM Finished: 10:46:50 AM Elapsed: 0.827 seconds. The package execution failed. The step failed. 

我包括在參考文獻中的OpenXML和WindowBase對象,並與「使用」的語句添加。

using DocumentFormat.OpenXml; 
using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Spreadsheet; 

這些是否需要向GAC註冊?或者有沒有辦法將它們包含在項目中(在SSIS中的腳本任務內)?在SSIS中的C#腳本任務中有「複製到本地」的設置,但不確定在SSIS內部會有什麼/如何工作。

任何幫助,將不勝感激。

+0

什麼是在prod服務器上運行SSIS包的用戶?你使用代理來運行它嗎?代理的用戶必須被授予對Excel文件所在的文件夾的讀取權限(如果需要,可以寫入) –

+0

它使用sa用戶,但是我們有其他軟件包可以創建,編輯,刪除和更新這些文件夾上的文件。 – Brad

回答

1

是的,你需要確保你擁有了它從GAC可用,也是集複製到C:\ WINDOWS \ Microsoft.NET \框架\

只是在做一些這方面的研究自己,發現了以下鏈接確認問題和解決方案: http://beyondrelational.com/modules/2/blogs/81/posts/11263/referencing-an-assembly-inside-ssis-script-task.aspx

+0

一個進一步的參考,可能有助於這裏http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/3180/ – GFraser

+0

好吧,我明白,但無論如何,包括在SSIS C#腳本中的.dll任務本身沒有將其添加到GAC? 我沒有訪問權限將其添加到服務器。 – Brad

+0

恐怕它不會出現。我猜想唯一的選擇是不適合的,那就是將OpenXml處理移到腳本之外的某個地方,但仍然可以通過SSIS訪問,例如,使用執行進程任務來運行一個程序,該程序可能引用了c#腳本無法訪問的庫。 – GFraser