【问题标题】:Excel interop not working on user logoutExcel互操作在用户注销时不起作用
【发布时间】:2015-04-04 02:04:55
【问题描述】:

我有一个奇怪的问题,我有一个 Silverlight 应用程序,它使用 Interop 来执行一段代码。

我的生产服务器有一个复杂的登录过程,并且用户的密码在规定的时间后永远不会保持不变。即密码不断变化。

因此,当我运行此应用程序时,直到任何用户登录该应用程序运行良好,一旦此人注销或会话过期,互操作就会停止工作,因为它没有交互式用户。

我已经阅读了这个问题的几篇帖子,大多数 like this 要求在 DCOMCNFG 设置中配置身份。但我无法在我的 DCOMCNFG 中找到任何 microsoft office 组件(powerpoint、onenote、word、excel ......),但在我的本地我能够找到它。也没有找到互操作。错误是指这个 CLSID {00024500-0000-0000-C000-000000000046}。

我该如何解决这个问题。 Office 安装是否有任何问题,因此文件应该出现在我的 DCOMCNFG 中?

即使它确实出现了,是否有一线希望通过它我可以解决身份问题?由于我的生产服务器的密码不断变化,所以即使我转到 dcom 组件并转到属性中的身份选项卡,我能否给“此用户”一个固定的名称和密码?还是应该使用启动用户或交互式用户?

任何帮助将不胜感激。

【问题讨论】:

    标签: c# silverlight office-interop excel-interop dcom


    【解决方案1】:

    Microsoft 目前不推荐也不支持从任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)自动化 Microsoft Office 应用程序,因为 Office在此环境中运行 Office 时可能会出现不稳定的行为和/或死锁。

    如果您要构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。如果您使用服务器端解决方案中的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将在整体解决方案的稳定性方面承担风险。

    您可以在Considerations for server-side Automation of Office 文章中了解更多相关信息。

    【讨论】:

    • 我同意你的观点,但我使用 OpenXML 编写了 95% 的代码,而使用互操作的只有 5%。由于无法使用 openxml 强制重新计算宏和公式,因此需要使用互操作。所以我使用互操作打开并保存工作表,然后触发重新计算公式。此场景的任何输入
    • 我建议在服务器端使用任何第三方组件,正如前面提到的文章所建议的那样。例如,您可能会发现 Aspose 组件很有帮助。
    • 我无法使用任何第三方工具,也无法将其移至客户端。由于客户可能安装或未安装办公室或互操作。该应用程序的目的只是在 excel 中输入值,使用 Excel 中的公式计算输出并将输出返回。对于这种情况有任何建议的解决方法吗?使用 OpenXML 不会进行重新计算,因此仅用于打开和重新计算我正在使用 InterOp 的公式。也请您告诉我哪些组件已安全地进行无人值守执行:)
    • 我已经建议了使用第三方组件的解决方法。没有别的办法。
    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2015-05-04
    • 2018-10-26
    • 1970-01-01
    • 2018-10-23
    相关资源
    最近更新 更多