-2

我在 SSIS 中构建了一个包,它使用脚本任务打开 Excel 文件、格式​​化和刷新 Excel 中的一些数据。我希望在脚本任务运行时让 Excel 可见,以查看 Excel 是否一直挂起。这可能吗?我正在将通过 shell 脚本调用 Excel 的进程转换为使用 SSIS 来调用 Excel。我想第二个问题是,这是一个坏主意吗?

4

2 回答 2

9

为什么这是一个坏主意

一般来说,管理员的任务是最大限度地延长服务器或服务器上的服务的“正常运行时间”。机器上安装的软件越多,由于打补丁而导致服务中断和中断的可能性就越大。为了能够以您描述的机制操作 Excel,您将在该计算机上强制安装 MS Office。这将花费您一个软件许可证,并且所需的补丁数量将在这些管理员可能需要遵守的任何 SLA 中出现漏洞。

内存泄漏。连同整个补丁位,至少在过去,以编程方式操作 Excel 存在问题,基本上归结为很容易导致内存泄漏(我必须让你明白。分配的内存但从未放弃它,永远不要让分配的内存下降)。随着时间的推移,复合效应是运行此软件包将导致可用的系统内存越来越少,而回收它的唯一方法是通过重新启动,这将返回到 SLA。

您想查看 Excel 正在做什么的原因是您可以监控执行,因为它“一直挂断”。这听起来不像是一个稳定的过程。同样,没有管理员会希望在服务器上运行不稳定的进程。在事件的循环中有些事情是不对的。无论是您打开 Excel 的代码、它运行的宏等等,其中的某些东西都是错误的,这就是您需要检查该过程的原因。这类似于在猎枪伤口上贴创可贴。停止射击自己,您将不需要绷带。

您尝试执行的任务是“在 Excel 中打开 Excel 文件、格式​​化和刷新某些数据”,SSIS 可以将数据本地推送到 Excel。如果您预先格式化文件,请开发您的 SSIS 以写入格式化的文件并复制它,这应该可以工作。这不是优雅的,但它有效。有更好的方法来提供格式化数据,但在不了解您的基础架构的情况下,我不知道 SSRS、SharePoint、Excel Services、Power Pivot 等是否是可行的选择。

为什么您将看不到 Excel

一般来说,运行 SQL 代理的帐户可能会相当强大。为了防止像粉碎攻击这样的事情,从 Windows 2008+ 开始,服务的功能受到限制。为了使服务帐户能够与桌面交互,您必须将其移至应用程序的用户层,如果您或您的 DBA/管理员不承担风险,这可能不是一件好事。

欲了解更多信息,请享受以下链接

也就是说,如果所有星星都对齐并且您接受允许服务与桌面交互的风险,那么答案与 Sam 指出的完全一样。在未显示的代码中,您需要将该Visible属性设置为 true。

当您离开并允许与桌面交互时,有人在包中留下一些“测试”代码,这些代码将部署到生产环境MessageBox.Show("Click OK to continue");中,请注意,如果没有人注意到这个对话框坐在那里,您将有一项工作等待完成很长时间。

于 2014-09-30T14:11:33.433 回答
0

关于您的第一个问题,我了解您想要调试脚本任务。您可以通过在脚本任务中添加以下代码行来使 Excel 可见(假设 C# 是编码语言):

    // Create your Excel app
    var excelApp = new Excel.Application();

    // Make the Excel window visible to spot any issues
    excelApp.Visible = true;

调试后不要忘记删除/注释该行。

关于您的第二个问题,如果您正确处理 Excel 的打开和关闭方式以避免内存问题,我认为这不是一个坏主意。

于 2014-09-30T10:54:56.790 回答