有没有人有一个从.Net应用程序控制多个Excel实例的好例子?

时间:2008-09-17 20:55:47

标签: c# .net vb.net excel

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

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

有没有人在VB.Net或C#中做过这样的好事(即工作)?

4 个答案:

答案 0 :(得分:3)

不要这样做!

我们试了几个星期才能得到类似的东西,而且它的行为并不像宣传的那样。甚至不要开始 - 立即放弃!

您真正拥有的唯一选项是基于服务器端的基于MOSS的实施 - Excel(Web)服务(他们称之为类似)。基于Windows的COM Excel互操作已经死了,将被MOSS取代。

另一种选择是使用SpreadsheetGear。它实际上是一个梦幻般的产品

  1. 速度很快
  2. 引擎与UI分开,因此您可以使用它来执行Excel服务器端(没有安装办公室)
  3. 相当便宜
  4. 具有类似于现有Excel COM API的API,因此移动代码相对容易
  5. 这完全取决于电子表格中需要的公式。看一下Spreadsheet Gear的公式列表,如果匹配,请查看它。

答案 1 :(得分:2)

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

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

如果您为一组有限的Interop场景编写了非常仔细的代码,则可以避免此问题。但在一般情况下,要让它可靠地运作是非常困难的。

答案 2 :(得分:1)

您可能需要查看此产品:http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx

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

答案 3 :(得分:1)

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