Excel ЧаВо

Что работает быстрее, запись в Range или Cells?


Запись в Range работает быстрее, но не существенно (смотрите в Demo-проекте пример "Как сделать, чтобы Excel работал быстрее?"). Это связано с тем, что в Excel TLB свойство Cells.Item[R, C] имеет тип OleVariant и, как следствие, позднее связывание. В C# между Range и Cells нет никакой разницы.

Для перевода из координат R1C1 в A1 удобно пользоваться "самодельными" функциями, например:

Delphi:

function xlRCtoA1(const ARow, ACol: Integer; RowAbsolute: Boolean = False; ColAbsolute: Boolean = False): String;

const

A1 = Ord('A') - 1; // номер "A" минус 1 (65 - 1 = 64)

AZ = Ord('Z') - A1; // кол-во букв в англ. алфавите (90 - 64 = 26)

var

t, m: Integer; S: String[9]; // чтобы экономить память IV=256 последний столбец

begin

// номер колонки

t := ACol div AZ; // целая часть

m := (ACol mod AZ); // остаток?

if m = 0 then Dec(t); if t > 0 then S := Char(A1 + t) else S := ''; if m = 0 then t := AZ else t := m; S := S + Char(A1 + t); // весь адрес

if ColAbsolute then S := '$' + S; if RowAbsolute then S := S + '$'; S := S + IntToStr(ARow); Result := S;

end;

Вот еще примеры



Содержание раздела