作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在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);
有没有更快的方法来做到这一点?我正在复制整行。我没有使用复制/粘贴缓冲区...任何帮助或想法表示赞赏。
最佳答案
目标是限制您需要对 Excel 进行的调用次数。
为此,请利用 Worksheet.Range
属性接受单个字符串中的多个单元格这一事实。使用并集运算符(逗号)一次描述多个单元格。也就是说,在循环中,构建要复制的单元格的逗号分隔列表。然后调用 Range
获取范围引用,并在该单个范围上使用 EntireRow.Copy
。
此外,避免重复不需要完成的工作。例如,原始工作表应在整个循环中保持选中状态,因此您无需继续告诉 Excel 在每次迭代时选择它。即使该操作没有任何实际效果,您的程序仍然需要完成打包 COM 调用并将其传递给 Excel 的工作。
关于excel - Delphi - Excel - 如何加快运算速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392078/
我是一名优秀的程序员,十分优秀!