我在SSIS中构建了一个包,它使用脚本任务在Excel中打开Excel文件,格式化和刷新一些数据。我希望在脚本任务运行时看到Excel,以查看Excel是否一直挂起。这可能吗?我正在转换一个通过shell脚本调用Excel的进程,而不是使用SSIS来调用Excel。我想第二个问题是,这是个坏主意吗?
答案 0 :(得分:9)
一般而言,管理员的任务是最大化服务器上的服务器或服务的“正常运行时间”。安装在机器上的软件越多,服务中断和修补中断的几率就越大。为了能够在您描述的机制中操作Excel,您将强制在该计算机上安装MS Office。这将花费您一个软件许可证和所需的修补程序将会破坏这些管理员可能需要遵守的任何SLA。
内存泄漏。除了整个修补位,至少在过去,有一些问题,以编程方式操作Excel,它基本上归结为它很容易结束内存泄漏(我要让你理解。分配内存但从未放弃,永远不要让分配的内存下降)。随着时间的推移,复合效果是运行此程序包将导致可用的系统内存越来越少,并且回收它的唯一方法是重新启动,然后返回到SLA。
您想要查看Excel正在执行的操作的原因是您可以监视执行,因为它“挂起并且一直发生”。这听起来不像一个稳定的过程。同样,没有管理员希望在服务器上运行不稳定的进程。 某些事情在事件的循环中是不对的。无论是打开Excel的代码,运行它的宏等等,还是存在错误,这就是你需要检查进程的原因。这类似于在霰弹枪伤口上放置一个绑带。停止拍摄自己,你不需要绷带。
您尝试执行的任务是“打开Excel文件,格式化并在Excel中刷新一些数据”SSIS可以将数据本机地推送到Excel中。如果您预先格式化文件,请开发SSIS以写入格式化文件并将其复制掉,这应该可行。它不优雅,但它的工作原理。有更好的方法提供格式化数据但不知道您的基础架构,我不知道SSRS,SharePoint,Excel Services,Power Pivot等是否可行。
一般来说,运行SQL Agent的帐户可能会相当强大。为了防止像shatter attack这样的内容,来自Windows 2008+的服务受限于他们可以做的事情。要使服务帐户能够与桌面交互,您必须将其移动到应用程序的用户层,如果您或您的DBA /管理员存在风险不利,这可能不是一件好事。
如需了解更多信息,请访问以下链接
也就是说,如果所有的星星都是对齐的并且您接受了允许服务与桌面交互的风险,那么答案就像Sam指出的那样。在未示出的代码中,您需要将Visible
属性设置为true。
当您离开并允许与桌面进行交互时,有人在使用MessageBox.Show("Click OK to continue");
部署到生产的包中留下一些“测试”代码,请注意如果没有人注意到此对话框就在那里,您将会有一份工作等待很长时间才能完成。
答案 1 :(得分: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的打开和关闭方式,我不知道这是一个坏主意,以避免内存问题。