使用 Microsoft.office.Interop.Excel 读取 Excel 时性能缓慢

3

使用 Microsoft.office.Interop.Excel 从 Excel 文件中读取数据时,如果使用 Range dataRange = (Range)cSheet.Cells[row, col]; 进行操作,性能会非常慢。但是如果去掉 Range dataRange = (Range)cSheet.Cells[row, col]; ,则速度将更快。我错过了什么?需要做出哪些改变?

int rows = cSheet.UsedRange.Rows.Count;
int cols = cSheet.UsedRange.Columns.Count;

for (int row = 2; row <= rows; row++)
{
  for (int col = 1; col <= cols; col++)
  {
        Range dataRange = (Range)cSheet.Cells[row, col];
  }
}
1个回答

4

您希望一次完成它:

object[,] objectArray = cSheet.get_Range("A1:C4").Value2;
dataRange.Value2 = objectArray;

要获取"A1:C4"的UsedRange地址,请尝试以下操作:
Microsoft.Office.Interop.Excel.Range range = cSheet.UsedRange;
string address = range.get_Address();
string[] cells = address.Split(new char[] {':'});
string beginCell = cells[0].Replace("$", "");
string endCell = cells[1].Replace("$", "");

如何设置数值?我是这样使用的,但这很慢:object value = objectArray[row, col]; ((Range)jetixSheet.Cells[row, col]).Value2 = value; 如何设置数值?我是这样使用的,但这很慢:object value = objectArray[row, col]; ((Range)jetixSheet.Cells[row, col]).Value2 = value; - theChampion
是的,你正在迭代所有行和列来获取值,而我向你展示了一种在一行代码中将所有值分配给多维对象数组的方法:dataRange.Value2 = objectArray; - Jeremy Thompson
@JeremyThompson,我有与这个答案相关的问题,您能帮忙吗?https://stackoverflow.com/q/49784560/1462656 - erotavlas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接