Цитата:
Сообщение от
Poleax
X++:
range = xlApp.Range('test');
n=doc.getCellName_RowNum("test");
range1 = range;
for (i=1;i<=10;i++)
{
// в цикле только пишем значения, не форматируем
// адрес не зависит от счетчика цикла
doc.insertRow(n,1,i);
doc.insertValue( range1.Address(), i);
range1 = range1.Offset(1,0);
}
Я немножко подправил фрагмент и упростил, отказавшись от range1 и его переопределений внутри цикла. Несмотря на зловещее выражение для вычисления адреса для insertValue, в нем используется вполне прозрачное для понимания свойство Item, которое удобно следует за счетчиком цикла. Пусть это будет вариант 5
X++:
range = xlApp.Range('test');
//n=doc.getCellName_RowNum("test");
n = range.Row(); // раз уж переменную range определили, то чего так далеко за строкой лазить :)
for (i=1;i<=10;i++)
{
// поменял операции местами для удобства понимания:
// т.е. сначала записываем значение, а потом добавляем строку ниже
doc.insertValue(any2str(COM::createFromVariant(range.Item(i, 1)).Address()), i);
doc.insertRow(n, 1, i);
}
// удаляем последнюю строку - она всегда лишняя (здесь i=11)
doc.deleteRow(any2int(COM::createFromVariant(range.Item(i, 1)).Row()));
// после цикла ячейка test так и остается первой (верхней) ячейкой обработанного диапазона