|
![]() |
#1 |
MCTS
|
Цитата:
на самом деле трудозатраты одинаковые, разница только в том что запишется в ячейку, готовое число или формула.
С подсчетом готового числа и выводом его в эксель иногда бывает заморочка с округлением на пару копеек (может и больше в зависимости от объёма отчета). Связано это с количеством знаков после запятой, которое настроено в экселе. Пару раз напарывался на такое. |
|
![]() |
#2 |
Moderator
|
Цитата:
![]() |
|
![]() |
#3 |
Ищущий знания...
|
Забыл добавить, я всегда считаю итоги в аксапте
![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#4 |
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). |
![]() |
#5 |
int 20h
|
Цитата:
![]() ![]()
__________________
It's just my Unhopelessnessabilityerism ![]() Trying to debug my mind ![]() |
|
![]() |
#6 |
Участник
|
Всем еще раз большое спасибо.
__________________
Александр |
|