我正在使用c#VSTO和Interop lib来开发excel加载项。用于在将这些值粘贴到具有格式的另一个工作簿之前验证每个单元格的值。我的实际查询是用一些标准处理(以最快的方式)单元格。
我使用了WorkSheet.Cells.SpecialCells()来获取我感兴趣的Excel.Range对象,并使用线程同时处理Excel.Range(由SpecialCells()返回)。 以下是一些观察/问题:
解决上述问题的任何输入或指示都会有所帮助。还有关于快速处理大型excel文件的任何建议,比如几秒钟(这是目前最大的瓶颈)
答案 0 :(得分:2)
Excel本质上是一个单线程应用程序(从技术上讲,COM对象位于单线程单元中)。这意味着任何COM访问都会自动编组到主线程,因此使用额外的线程进行COM调用没有任何好处。
对于您的用例,将整个数据数组放入Range.Value
的单个调用中然后进一步处理此数组而不使用额外的COM调用是有意义的。
您可能还需要查看this question有关如何快速读取和写入范围数据的想法,包括使用Excel C API的示例。
另一种方法是直接读取Excel数据文件,而不是与Excel应用程序交互。为此,您可以使用基于xml的文件格式(如ClosedXML)的高级包装器。