Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#中的Excel Interop从多个.xlsx文件提取数据的最有效方法?_C#_Excel_Multithreading_Interop_Excel Interop - Fatal编程技术网

使用c#中的Excel Interop从多个.xlsx文件提取数据的最有效方法?

使用c#中的Excel Interop从多个.xlsx文件提取数据的最有效方法?,c#,excel,multithreading,interop,excel-interop,C#,Excel,Multithreading,Interop,Excel Interop,我刚刚开始接触Excel Interop,想知道如何通过实现多线程或多任务来提高应用程序的性能 我的代码类似于atm: foreach(var path in arrayOfExcelFilePaths){ excelApp.Workbooks.Open(path); } foreach(var wb in excelApp.Workbooks){ //Read stuff and maybe write stuff } 提前感谢所有对此进行研究的人。使用互操作通常是个坏主意。

我刚刚开始接触Excel Interop,想知道如何通过实现多线程或多任务来提高应用程序的性能

我的代码类似于atm:

foreach(var path in arrayOfExcelFilePaths){
    excelApp.Workbooks.Open(path);
}
foreach(var wb in excelApp.Workbooks){
    //Read stuff and maybe write stuff
}

提前感谢所有对此进行研究的人。

使用互操作通常是个坏主意。代码的执行与在VBA宏中编写的代码没有太大区别,因为Interop只是在后台运行Excel进程,并以1对1的方式复制其功能


请尝试OfficeOpenXML或任何其他库,这些库允许您在不运行MS excel的情况下操作excel工作表的内容。

我强烈建议您使用该库,它是该库的较新版本。它快速可靠,我多年来一直在使用它,没有任何问题。

如果使用单个Excel实例,我不知道多线程是否会提高读取时间。您可以尝试为每个工作簿创建单独的excel应用程序。此外,在尝试多线程之前,我会尝试确保我的读取操作得到优化,因为这通常是导致exel互操作IO不佳的原因。感谢您的回复。优化读取操作的确切含义是什么?我的意思是,读取操作应该一次将所有数据读取到一个数组中。即使对于非常大的数据集,这通常也是相当快的。互操作的缓慢主要是由于托管/非托管代码与IPC之间的封送,因此减少封送操作的数量通常会大大加快速度。若你们愿意,我可以回答得更详细一些,但我会要求你们用一些读写代码更新你们的答案。