Страница 1 из 1

xlSetCellFormula помощь расчете

Добавлено: 19 сен 2016, 11:40
rozum
Добрый день! Подскажите пожалуйста как правильно прописать формулу в Vip
loop TPRN
{
есть 3 поля по которым надо произвести расчет( 6+7-9 столбцы)
......
xlDoWriteToMatrix(CurMatrixRow, 6, Round(TPRN.BegOst,2));
xlDoWriteToMatrix(CurMatrixRow, 7, TPRN.Prihod);
xlDoWriteToMatrix(CurMatrixRow, 9, TPRN.SumOpl);
....
если прописываю вот так то, считает первые три строки , а матрица начинается с 4 строки на 3 выводит шапку
xlSetCellFormula('=ОКРУГЛ(RC[-4]+RC[-3]-RC[-1];2)', CurMatrixRow, 10, CurMatrixRow , 10);

а если добавляю сдвиг то не отрабатывает вообще
xlSetCellFormula('=ОКРУГЛ(RC[-4]+RC[-3]-RC[-1];2)', CurMatrixRow + StartMatrixR, 10, CurMatrixRow + StartMatrixR , 10);
...
}

пыталась добавить расчет после
xlFreeMatrix;
xlSetCellFormula('=ОКРУГЛ(RC[-4]+RC[-3]-RC[-1];2)', CurMatrixRow + StartMatrixR-2, 10, CurMatrixRow + StartMatrixR -2 , 10); // выводит формулу на последнюю строку матрицы
а как мне добиться чтобы расчет формулы был от начала( то есть 4 строки ) и до конца последней строки вывода матрицы?

Re: xlSetCellFormula помощь расчете

Добавлено: 19 сен 2016, 11:55
Den
Самое простое, еще раз "пробежать" цикл от строки начала вывода матрицы до размера высчитанного CurMatrixRow, где внутри делать ваше xlSetCellFormula. Не ?

Re: xlSetCellFormula помощь расчете

Добавлено: 19 сен 2016, 12:12
edward_K
1. Запись матрицы затирает все формулы. Поэтому либо ограничьте вашу матрицу по ширине до столбца с формулой, либо формулу нужно задавать после вывода матрицы.
2. Если будет какое то объединение ячеек при групповом изменении формулы, то тоже будет проблема.
По хорошему вы должны вести две переменных - строку начала таблицы, строку окончания таблицы.
Выведите их в лог. Тогда вы можете практически во всех функциях писать как .... строка_начала, столбец , строка_окончания, столбец )
отсчет идет 1. Ну а можно и в цикле позадавать.

Re: xlSetCellFormula помощь расчете

Добавлено: 19 сен 2016, 12:23
RAJAH
Нельзя разве в матрицу сразу написать что-то вроде

Код: Выделить всё

xlStWriteToMatrix(i, 6, '=sum(R[-'+string(i+1)+']C:R[-2]C)');
Почему xlSetCellFormula потом делать?

Re: xlSetCellFormula помощь расчете

Добавлено: 19 сен 2016, 12:44
rozum
Спасибо! попробовала задать в vip MaxMatrixCol := 9 а формулу прописала на 10 , дальше думаю в макросе буду чего нибудь придумывать :)

Re: xlSetCellFormula помощь расчете

Добавлено: 19 сен 2016, 16:06
rozum
xlStWriteToMatrix(CurMatrixRow, 10, '=sum(RC[-4]+RC[-3]-RC[-1])');
по этой сроке отработало
не могли бы вы ещё помочь. Можно ли нелету и в расчете округлять значение?
то есть xlStWriteToMatrix(CurMatrixRow, 10, '=ОКРУГЛ(sum(RC[-4]+RC[-3]-RC[-1]);2)'); так не хочет отрабатывать :x

Re: xlSetCellFormula помощь расчете

Добавлено: 19 сен 2016, 16:17
edward_K
все таки xlSetCellFormula<> xlStWriteToMatrix. Хотя пробуйте. Проверьте, что тип ячейки в отчете общий или числовой.
По мне так лучше держать формулы в шаблоне, либо рассчитывать сразу при выводе.

Re: xlSetCellFormula помощь расчете

Добавлено: 19 сен 2016, 16:30
Irina_
Здравствуйте.
1.
xlDoWriteToMatrix(CurMatrixRow, 6, Round(TPRN.BegOst,2));
xlDoWriteToMatrix(CurMatrixRow, 7, Round(TPRN.Prihod,2));
xlDoWriteToMatrix(CurMatrixRow, 9, Round(TPRN.SumOpl,2)); 
2.
Установите нужный формат вывода для нужного столбца
3.
Вместо
 xlStWriteToMatrix(CurMatrixRow, 10, '=ОКРУГЛ(sum(RC[-4]+RC[-3]-RC[-1]);2)');
попробуйте:
 xlStWriteToMatrix(CurMatrixRow, 10, '=ОКРУГЛ(СУММ(RC[-4]+RC[-3]-RC[-1]);2)');

Re: xlSetCellFormula помощь расчете

Добавлено: 20 сен 2016, 13:27
rozum
Спасибо всем за помощь расчет формулы прошел по
xlStWriteToMatrix(CurMatrixRow, 10, '=sum(ROUND(RC[-4]+RC[-3]-RC[-1],2))');