0

我在每天输出 SAS 数据集的 Windows 服务器上运行自动化数据作业。最重要的是,我有一个通过 Excel 的本地数据提供程序连接的 Excel 报告。

我的问题是,数据连接需要由 PC 上安装了 SAS 的人手动刷新。我尝试编写一段 SAS 代码来打开服务器上的 Excel 文件,然后在关闭和保存之前触发一段 VBA 进行刷新。如果我登录到服务器,这将非常有效。但是,如果没有人登录,它似乎不起作用。我相信这与活跃的用户会话有关。

更新

我用来从 Excel 连接到本地数据源的过程如下所示:

  1. 数据连接向导
  2. 从 OLE DB 提供程序中选择 SAS 本地数据提供程序
  3. 将路由添加到我的 SAS 数据集作为数据源
  4. 选择我的源表并创建数据透视表

有没有办法做这样的事情?

4

1 回答 1

2

当您想在无人参与的情况下运行 Excel,因此没有交互式用户登录时,您可以使用 Windows 服务执行此操作。您必须确保 Excel 的一些设置,以及如何启动 Excel 很重要。

请注意,Microsoft 不支持,甚至不建议您这样做。Excel 是一个客户端软件,它与作为服务运行的易于维护的软件完全相反。阅读这篇关于该主题的优秀文章Office 服务器端自动化的注意事项。即使有点旧(谈论 Office 2003),它仍然是最先进的。

请考虑以下条件:

  • 您不能使用系统或网络帐户,您必须让 Windows 服务在至少启动过一次 excel 的帐户下运行。这不能用命名的来完成(因为它们不能用作交互式用户)
  • Excel 必须至少使用 Windows 服务帐户下的用户打开一次才能运行。您必须配置 dcom 设置,打开 vba 一次以对其进行初始化,并且很可能设置一些设置,例如“信任 vba 模型”,以便能够以编程方式访问 Excel
  • 最后但并非最不重要的一点是,在启动 Excel 时,您必须通过加载用户配置文件来启动它。c# 中的 Process.Start 方法通过将布尔值设置为 true 来实现这一点。

这样做,Excel 应该可以正常启动并更新与 VBA 的数据连接。

于 2015-07-03T15:21:58.520 回答