正在 Windows 服务器上刷新 Excel 数据连接

Refreshing Excel Data connection on a Windows Server

我是 运行 windows 服务器上的一项自动化数据作业,每天输出 SAS 数据集。除此之外,我还有一个通过 Excel 的本地数据提供程序连接的 Excel 报告。

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

更新

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

  1. 数据连接向导
  2. Select 来自 OLE DB 提供程序的 SAS 本地数据提供程序
  3. 将路由添加到我的 SAS 数据集中作为数据源
  4. Select 我的来源 table 并创建数据透视报告

有什么办法可以做到这一点吗?

如果您想 运行 Excel 无人值守,因此没有交互式用户登录,您可以使用 Windows 服务来实现。您必须确保 Excel 的某些设置,以及如何启动 excel 也很重要。

请注意,Microsoft 不支持,甚至不建议您这样做。 Excel是一个客户端软件,它恰好是一个易于维护运行ning as as service的软件。阅读这篇关于该主题的 excel 借出文章 Considerations for server-side Automation of Office。即使有点旧(谈论 Office 2003)它仍然是最先进的。

请考虑这些条件:

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

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

  • 您可能希望在 c# 中实现 windows 服务,因为它非常简单,请看一下:Creating a Basic Windows Service in C#
  • 使用 C# 时,请注意您必须正确处理互操作对象,How to properly clean up Excel interop objects
  • 中对此进行了很好的描述