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

时间:2020-03-05 19:00:02  来源:igfitidea点击:

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

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

是否有人在VB.Net或者C#中有一个很好的(例如正在工作)示例来做这样的事情?

解决方案

回答

我们可能需要看一下该产品:http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx

全部都是托管代码和直接的.NET库。没有InterOp头痛。我自己还没有使用过它,但是我已经从金融界的人们那里听到了很好的消息。

回答

不要做!

我们尝试了数周的时间来使类似的东西正常工作,但它的行为根本不如广告中所言。甚至不要立即放弃!

我们真正拥有的唯一选择是基于服务器端基于MOSS的沉重实现Excel(Web)服务(它们称之为类似服务)。基于Windows的COM Excel互操作几乎已死,将由MOSS代替。

另一种选择是使用SpreadsheetGear。这实际上是一个了不起的产品

  • 速度很快
  • 该引擎与UI分开,因此我们可以使用它来做Excel东西服务器端(未安装Office)
  • 相当便宜
  • 具有类似于现有Excel COM api的API,因此跨代码移动相对容易

这完全取决于电子表格中所需的公式。查看Spreadsheet Gear的公式列表,如果有匹配项,就去看看。

回答

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

回答

Interop可以正常工作,除了我们总是以对未释放的Excel对象的引用结尾,因此Excel实例不会关闭。以下知识库文章解释了原因:

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

如果我们为一组有限的Interop方案编写了非常仔细的代码,则可以避免该问题。但是在一般情况下,很难使其可靠地工作。