Что работает быстрее, запись в 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;
Вот еще примеры