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

实时(未保存的)Excel数据和C#对象之间的接口的最快捷的方法就是如何有效地访问Excel数据。 根据这个答案,两个build议是使用Excel-Dna或Add-in Express。

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

从Excel中获取单元格值可以通过DirectCast(Range.Value, Object(,))高效地完成。 不幸的是,这是不可能的其他属性,如Range.TextRange.NumberFormat 。 正如所料,遍历单元格非常缓慢。

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

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

作为开始,我build议你看看ClosedXML ,但也有很多类似的项目。 ClosedXML看起来像一个活动项目,并尝试镜像COM接口。 [我自己没有经验。]

从一系列单元格中逐个获取数字格式将会慢于任何技术(Interop的速度会更慢),并且我不知道如何获得具有单个对象的不同数字格式的相应数组模型调用。
如果您的excel数据是格式的集群,您可以利用Range("C1:C4").Numberformat将获得单个数字格式,如果该范围内的所有单元格具有相同的数字格式,但如果在范围内的数字格式不同,你会得到一个空值