C# 迭代 excel 工作表的有效方法

Tim*_*imB 3 c# iteration excel

我有以下代码:

string result = "";
for(int i=2; i<=excelRange.Rows.Count; i++)
{
    result += excelRange.Cells[i, 2].Value2;
}
Run Code Online (Sandbox Code Playgroud)

对于包含数百个条目的 Excel 文件,这需要 5 秒钟。也许有更有效的方法吗?我只想要从 B2 到 Bn 的值。

Cod*_*odo 6

是的,有一种更有效的方法。

  1. 创建一个与您真正需要的单元格完全匹配的范围。

  2. 获取此范围的Value2属性。结果将是一个数组类型。

  3. 遍历数组

您的方法的问题在于您的应用程序和 Excel 之间存在大量进程间请求。您的方法每个单元格需要两个或三个请求。所提出的方法要快得多,因为它需要预先一些请求,但每个单元不需要额外的请求。

请注意,此操作最多可处理约 4000 个单元。如果需要处理更多单元格,则需要将其拆分为多个范围,每个范围包含的单元格少于 4000 个。

更新

假设 Excel 已经运行,它看起来像这样(自动选择 B 列中正确的行数):

var excelApp =  (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
var range = (Excel.Range)workSheet.Range[workSheet.Range["B2"],
        workSheet.Range["B2"].End[Excel.XlDirection.xlDown]];
var cellData = (Object[,])range.Value2;

string result = "";
foreach (var cell in cellData) {
    result += cell.ToString();
}
Run Code Online (Sandbox Code Playgroud)