正在 Windows 服务器上刷新 Excel 数据连接
Refreshing Excel Data connection on a Windows Server
我是 运行 windows 服务器上的一项自动化数据作业,每天输出 SAS 数据集。除此之外,我还有一个通过 Excel 的本地数据提供程序连接的 Excel 报告。
我的问题是,数据连接需要由在其 PC 上安装 SAS 的人员手动刷新。我已经尝试编写一段 SAS 代码来打开服务器上的 Excel 文件,然后在关闭和保存之前触发一段 VBA 进行刷新。如果我登录到服务器,这将非常有效。但如果没有人登录,它似乎不起作用。我相信这与活跃的用户会话有关。
更新
我用来从 Excel 连接到本地数据源的过程如下所示:
- 数据连接向导
- Select 来自 OLE DB 提供程序的 SAS 本地数据提供程序
- 将路由添加到我的 SAS 数据集中作为数据源
- 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
中对此进行了很好的描述
我是 运行 windows 服务器上的一项自动化数据作业,每天输出 SAS 数据集。除此之外,我还有一个通过 Excel 的本地数据提供程序连接的 Excel 报告。
我的问题是,数据连接需要由在其 PC 上安装 SAS 的人员手动刷新。我已经尝试编写一段 SAS 代码来打开服务器上的 Excel 文件,然后在关闭和保存之前触发一段 VBA 进行刷新。如果我登录到服务器,这将非常有效。但如果没有人登录,它似乎不起作用。我相信这与活跃的用户会话有关。
更新
我用来从 Excel 连接到本地数据源的过程如下所示:
- 数据连接向导
- Select 来自 OLE DB 提供程序的 SAS 本地数据提供程序
- 将路由添加到我的 SAS 数据集中作为数据源
- 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 中对此进行了很好的描述