2015-10-15 117 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