|
![]() |
#1 |
Moderator
|
С претензией на универсальность
Размялся. Набросал метод (excelInsertSumBelowColumns), помещающий суммирующие ячейки в заданный итоговый диапазон под колонками с данными (_rangeSum). Если в диапазоне несколько ячеек, то суммирующие формулы будут созданы для каждого столбца над этими ячейками. Если заданный итоговый диапазон содержит более одной строки (случайно, ошибочно), то формулы будут помещены только в первую строку этого диапазона. Второй и третий необязательные параметры - первая и последняя строка суммирования данных (имеется ввиду номер строки Excel). Если эти параметры не указаны, то в конкретном столбце суммируются все ячейки, начиная со строки 1 и кончая строкой перед ячейкой с суммой.
В рамках примера демонстрируется в виде вложенной функции. В приложении может жить - как больше нравится: либо как метод класса ComExcelDocument_RU, либо как статический метод класса Global, либо как еще фантазия подскажет (я лично помещу статический метод в персональный "Global"). X++: static void Job134(Args _args) { ComExcelDocument_ru excel = new ComExcelDocument_RU(); COM app; COM book; COM range; ///////////////////////////////////////////////////////// void excelInsertSumBelowColumns(COM _rangeSum, int _rowFirst = 1, int _rowLast = 0) { COM range1; int rowSum; ; range1 = _rangeSum.Rows(); range1 = COM::createFromVariant(range1.Item(1)); rowSum = range1.Row(); if (rowSum == 1) { warning('Нечего суммировать!'); return; } if (_rowFirst < 1) _rowFirst = 1; if (_rowFirst >= rowSum) _rowFirst = rowSum - 1; if (!_rowLast || _rowLast >= rowSum) _rowLast = rowSum - 1; if (_rowLast && _rowLast < _rowFirst) _rowLast = _rowFirst; range1.FormulaR1C1(strFmt('=SUM(R[-%1]C:R[-%2]C)', rowSum-_rowFirst, rowSum-_rowLast)); } ///////////////////////////////////////////////////////// ; excel.newFile("", false); book = excel.getComDocument(); app = book.Parent(); range = app.range("A10:F10"); excelInsertSumBelowColumns( range ); excel.visible(true); } |
|
|
За это сообщение автора поблагодарили: tolstjak (1), zZ_TOP_Zz (1), player (1). |