Delphi - Excel - 如何加快操作

时间:2014-10-15 21:03:38

标签: excel performance delphi

我正在为Delphi XE6中的Excel编写插件。我不得不复制"从一张纸到另一张纸的行。挑战在于我的操作比我想象的要花费更长的时间。例如,要将500张(23列)从一张纸复制到另一张,需要28秒左右......

部分挑战是我必须逐行处理。我有一个INT数组,每行一个INT。 INT值告诉我是否需要复制该行...

...for loop i ... through entire array....
...if row I am interested in...

      // Set the Original Sheet Active
      MasterOrigSheet.Select;

      // Build my row numbers
      SourceRangeCell := 'A' + IntToStr(i);
      DestRangeCell := 'A' + IntToStr(DestRowNumber);

      // Copy the row from source to destination
      MasterOrigSheet.Range[SourceRangeCell, SourceRangeCell].EntireRow.Copy
        (NewSheet.Range[DestRangeCell, DestRangeCell].EntireRow);
      Inc(DestRowNumber);

有更快的方法吗?我正在复制整行。我没有使用COPY / PASTE缓冲区......任何帮助或想法都很受欢迎。

1 个答案:

答案 0 :(得分:9)

目标是限制您需要对Excel进行的调用次数。

为此,请利用Worksheet.Range属性接受单个字符串中的多个单元格这一事实。使用union运算符(逗号)一次描述多个单元格。也就是说,在循环中,构建一个以逗号分隔的要复制的单元格列表。然后致电Range以获取范围参考,并在该单一范围内使用EntireRow.Copy

另外,避免重复不需要做的工作。例如,原始工作表应在整个循环中保持选中状态,因此您无需继续告诉Excel在每次迭代时选择它。即使操作没有净效应,您的程序仍然需要完成打包COM调用并将其传递给Excel的工作。