使用.NET从另一个进程访问实时Excel数据/属性的最快方法

时间:2012-01-11 11:23:20

标签: .net excel automation com-interop

Fastest way to interface between live (unsaved) Excel data and C# objects提供了有关如何有效访问Excel数据的知识渊博的讨论。根据答案,两个建议是使用Excel-Dna或Add-in Express。

我相信Excel-Dna和Add-in Express都需要作为Excel加载项运行。在我的情况下,业务逻辑在另一个进程中运行并创建一个Excel实例(New Excel.Application())。在Excel中进行更改时,需要更新内部对象。

使用DirectCast(Range.Value, Object(,))可以高效地从Excel获取单元格值。不幸的是,对于其他属性,例如Range.TextRange.NumberFormat,这是不可能的。正如所料,迭代穿过单元格非常慢。

您认为从主流程访问Excel数据的最有效方法是什么?我想出的一个想法是在Excel中添加一个加载项(使用Excel-Dna),聚合数据然后将其发布到主应用程序。由于我没有太多使用跨AppDomain编组的经验,如果这是一种可行的方法,或者应该首选另一种方法,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

使用任何技术逐个获取一系列单元格中的数字格式会很慢(使用Interop会慢一些)并且我无法获得相应的不同数字格式数组一个对象模型调用。
如果您的Excel数据是格式集群,您可以利用Range("C1:C4").Numberformat如果该范围内的所有单元格具有相同的数字格式但是如果其中的任何数字格式将获得单一数字格式的事实范围不同你会得到一个空的

答案 1 :(得分:0)

也许您可以使用其中一个直接文件阅读器来阅读该文件,而不是通过Excel。 (如果需要,您可以自动执行Excel以保存文件或部分文件的副本。)

首先,我建议您查看ClosedXML,但有许多类似的项目。 ClosedXML看起来像一个活动项目,并尝试镜像COM接口。 [我自己没有经验。]