【发布时间】:2014-10-15 21:03:38
【问题描述】:
我正在为 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 缓冲区...感谢任何帮助或想法。
【问题讨论】:
-
最快的方法是只调用一次
Copy。在单个范围内指定整个源并在其上调用Copy。 -
@@David,在 600 行中,我可能想要第 1,2,4,5,7,8,9,13,14,17 行...基本上我会做大部分,但我肯定会跳过一些/很多......也就是我的行不连续。我无论如何都找不到定义这样的范围...这是我只能调用一次 COPY 的唯一方法,对吗?
-
不能选择多行吗?如果在 Excel 中其自身,保持控制并选择第二个范围,则效果相同。
-
或者只复制所有行,然后删除你不想要的行
-
@Zibelas,我怀疑这会带来很大的改进。我强烈怀疑此操作中的主要时间消耗不是将数据从一张纸实际复制到另一张纸,而是正在进行的 COM 调用次数。如果我是对的,那么您的建议只会在复制超过 50% 的行时有所改善。
标签: excel performance delphi