Размялся. Набросал метод (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);
}