Функция рабочего листа для деления действительных чисел (например, /)

Я не нашел деления действительных чисел (например, /) в функциях рабочего листа. Как следствие, для вычисления =SUM(2,SUM(30,40)/3) мы не можем использовать одно выражение ctx.workbook.functions.sum(1,ctx.workbook.functions.sum(30,40)/3); мы должны сделать ctx.sync два раза:

function test () {
    Excel.run(function (ctx) {
        var result = ctx.workbook.functions.sum(30,40);
        var result2;
        result.load();
            return ctx.sync()
                .then(function () {
                    result2 = ctx.workbook.functions.sum(1,result.value/3);
                    result2.load(); })
                .then(ctx.sync)
                .then(function () {
                    console.log(result2.value); });
    }); 
}

Это означает, что если в одном выражении несколько /, мы должны использовать еще больше ctx.sync для его вычисления, что очень утомительно (и особенно трудно построить автоматически).

Так что было бы очень здорово либо найти функцию рабочего листа, либо обходной путь для /, чтобы мы все еще могли вычислять выражение, содержащее /, за один шаг.

PS: кажется, что для +, *, - тоже нет функции рабочего листа, но мы могли бы использовать обходные пути: sum для +, product для * и sum(..., product(-1, ...) для -.


person SoftTimur    schedule 12.07.2016    source источник


Ответы (2)


Одним из решений является использование комбинации функции product и функции power с показателем степени -1. Это решение будет работать, даже если знаменатель (делитель) является переменной, а не константой.

var myNumerator = 888, myDenominator = 4;
var funcs = ctx.workbook.functions;
var result = funcs.product(myNumerator,funcs.power(myDenominator,-1));

В вашем конкретном примере для оценки =SUM(2,SUM(30,40)/3) код будет таким:

result = funcs.sum(2,funcs.product(funcs.sum(30,40),funcs.power(3,-1)));
person Michael Saunders    schedule 12.07.2016
comment
В любом случае, я не думаю, что догадался бы об этой возможности без вашего постскриптума, так что спасибо за добавление новых трюков в наш арсенал API :) - person Michael Saunders; 13.07.2016
comment
Действительно очень круто. @SoftTimur, обратите внимание, что эти функции связываются таким образом, что любая функция принимает результат предыдущей функции, поэтому вы можете выполнить расчет так же, как Майкл Сондерс написал это выше, только с одним .load и .sync в самом конце. - person Michael Zlatkovsky - Microsoft; 13.07.2016

По крайней мере, для деления на константу (например, 3), разве это не то же самое, что product(something, .33333333)

person Michael Zlatkovsky - Microsoft    schedule 12.07.2016
comment
Я не знаю делимого и делителя... Итак, теперь, чтобы ответить мой предыдущий вопрос, теоретически, учитывая любую подформулу, мы могли бы автоматически построить одну строку с функциями рабочего листа, а затем использовать eval и ctx.sync... рад узнать, что это выполнимо... спасибо за вашу помощь.. . - person SoftTimur; 13.07.2016