George Spears
Posts: 80
Joined: 2010-05-06
|
Hello,
I have a plugin written for excel. One routine in the plugin goes through each row in a column and left pads the text with a certain number of '0'. I have a similar routine from Ablebits. (Which I think is written using Add-In Express). It is much faster than my code. I know there is something else I should be doing, but I don;t know what... Here is a code snippet. What am I overlooking?
for i := StartingRow to BoundRec.LastRow do
begin
// Make sure that there is NOT a filter applied.
if IsRowVisible(i) then
begin
CellAddr := ColumnToUpdate + IntToStr(i);
MyCellText := trim(aws.Range[CellAddr, EmptyParam].Value);
if Length(MyCellText) > 0 then
begin
// There is something here...
// If we want the text left aligned
if CB_Align.Text = 'Left' then
PaddedText := PadC(MyCellText, StrToInt(PadLength.Text), PadCharacter, True)
else
PaddedText := PadC(MyCellText, StrToInt(PadLength.Text), PadCharacter, False);
// aws = Active worksheet.
aws.Range[CellAddr, EmptyParam].Value := PaddedText;
end;
end;
end;
There are 150,000 rows to process. I do notice that the rows appear to be DISPLAYED as soon as they are updated. By this, I mean that when I start the routine, I can see the first 30 or so rows, and the appropriate column values have changed, even though the routine is still working. Could my issue be that I need some type of "disable screen updating" function?
Thanks
George S |
|
Andrei Smolin
Add-in Express team
Posts: 19138
Joined: 2006-05-11
|
Hello George,
Instead of editing each cell, you need to construct a Range object containing many cells, retrieve an array containing their values by reading Range.Value, modify the values, and put them back by writing the array to Range.Value.
Andrei Smolin
Add-in Express Team Leader |
|