【问题标题】:Does anyone have a good example of controlling multiple Excel instances from a .Net app?有没有人有从 .Net 应用程序控制多个 Excel 实例的好例子?
【发布时间】:2008-09-17 20:55:47
【问题描述】:

我们有一个基于 Excel 2002/XP 的应用程序,它与 SQL 2000/5 交互以处理相当复杂的精算计算。该应用程序很好地执行了它的功能,但很难管理。

我们正在尝试创建一个“控制器”应用程序或服务,以管理和监控这些 Excel 的各种实例(启动/停止/处理命令等),但不幸的是,这有点像 InterOp 的噩梦。

有没有人有一个在 VB.Net 或 C# 中做类似事情的好(即工作)示例?

【问题讨论】:

  • 你还需要 Excel 吗?为什么不在您的 .NET 应用程序中自己进行计算?
  • 向合唱团讲道!转换工作量太大,管理层不会为“重新编码”已建立的应用程序买单。

标签: c# .net vb.net excel


【解决方案1】:

别这样!

我们尝试了数周来让类似的东西发挥作用,但它的表现并不像宣传的那样。甚至不要开始 - 立即放弃!

您真正拥有的唯一选择是基于服务器端 MOSS 的繁重实现 - Excel (Web) 服务(他们称之为类似的东西)。基于 Windows 的 COM Excel 互操作几乎已死,将被 MOSS 取代。

另一种选择是使用 SpreadsheetGear。它实际上是一个很棒的产品

  1. 速度极快
  2. 引擎与 UI 分离,因此您可以使用它来处理服务器端的 Excel 内容(未安装办公室)
  3. 相当便宜
  4. 有一个类似于现有 Excel COM api 的 API,因此移动代码相对容易

这完全取决于您在电子表格中需要的公式。查看电子表格齿轮的公式列表,如果有匹配项。

【讨论】:

  • “想都别想!”似乎是一种普遍的反应。我认为我们将尝试编写一个简单的“启动/停止/终止”类型的服务,但共识似乎是实际与多个实例交互是一条危险的道路。
【解决方案2】:

Interop 可以正常工作,只是您始终会引用未释放的 Excel 对象,因此 Excel 实例不会关闭。以下知识库文章解释了原因:

http://support.microsoft.com/default.aspx/kb/317109/EN-US/

如果您为一组有限的互操作场景编写了非常仔细的代码,则可以避免该问题。但在一般情况下,很难让它可靠地工作。

【讨论】:

    【解决方案3】:

    您可能想看看这个产品:http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx

    都是托管代码和直接 .NET 库。没有 InterOp 头痛。我自己没有用过,但我从金融界的人那里听到了非常好的事情。

    【讨论】:

    • 我们确实评估了这个产品。不幸的是,它不能完全满足我们的需求,而且转换工作量很大。
    【解决方案4】:

    我们编写了一个服务来控制 Excel 2003 的单个实例。我们从来没有设法让 Excel 实例干净地关闭,因此我们在第一次访问该服务时启动一个实例并仅使用它,序列化客户端请求。

    【讨论】:

      猜你喜欢
      • 2012-09-24
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多