![]() |
#15 |
Участник
|
До кучи
![]() В настоящее время, я в подобных случаях вставляю формулу напрямую в шаблон 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) } |
|