До кучи
В настоящее время, я в подобных случаях вставляю формулу напрямую в шаблон Excel. Точнее, в шаблоне Excel создается только 2 строки деталировки и строка с итоговой формулой. Непосредственно перед вставкой данных вставляется нужное количество пустых строк как копии первой строки деталировки.
2 строки деталировки нужны для того, чтобы при вставке строк формула с суммой в итоговой строке автоматически меняла адреса ячеек диапазона.
Для копирования строк в классе ComExcelDocument_RU сделал такой метод
X++:
/*
Вставка указанного количества строк, как копии одной строки шаблона
_rowTemplate - номер строки, которая будет размножена (скопирована)
_rowsInsert - количество строк, вставляемых ПОД укаазнной строкой шаблона
_workSheetId - номер листа Excel в котором это все происходит. Соответственно изменен и метод findRange()
*/
void rtg_insertRowsAsCopy(Row _rowTemplate, Row _rowsInsert, int _workSheetId = 1)
{
COM comRowSource;
Row currentRow,
insertedRows;
MSOfficeBookMark_RU bookMark;
;
#define.xlDown(-4121)
if (_rowsInsert < 2)
{
return;
}
// Итерационный цикл
// Вставляю сначала 1, потом 2, 4, 8 и т.п. строк на последнем шаге вставляю остаток строк
currentRow = 1;
while (currentRow < _rowsInsert)
{
if (currentRow * 2 <= _rowsInsert)
{
insertedRows = currentRow;
currentRow += insertedRows;
}
else
{
insertedRows = _rowsInsert - currentRow;
currentRow = _rowsInsert;
}
bookMark = int2str(_rowTemplate) + ":" + int2str(_rowTemplate + insertedRows - 1);
comRowSource = this.findRange(bookMark, _workSheetId);
comRowSource.copy();
comRowSource.insert(#xlDown);
} // while (currentRow < _rowsInsert)
}
Идея заключается в том, чтобы, по возможности, переложить всю работу по наведению красоты на сам Excel. А из Axapta импортировать только "гладкий" список, не задумываясь о его форматировании и обслуживании.