Delphi – Excel – 如何加快运行速度

我正在为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缓冲区…任何帮助或想法赞赏。

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

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

另外,避免重复不需要做的工作。 例如,原始表格应该在整个循环中保持选中状态,所以不需要一直告诉Excel在每次迭代中select它。 即使这个操作没有效果,你的程序仍然需要经过打包COM调用并把它传送到Excel的工作。