有没有人有从.Net应用程序控制多个Excel实例的好例子?
我们有一个基于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方案编写了非常仔细的代码,则可以避免该问题。但是在一般情况下,很难使其可靠地工作。