2016-07-12 6 views
2

Ich habe keine Division von reellen Zahlen (dh /) in worksheet functions gefunden. Als Konsequenz können wir zur Auswertung =SUM(2,SUM(30,40)/3) keinen Ausdruck ctx.workbook.functions.sum(1,ctx.workbook.functions.sum(30,40)/3); wir ctx.sync zweimal zu tun haben:Arbeitsblattfunktion für Division von reellen Zahlen (dh, /)

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); }); 
    }); 
} 

Das heißt, wenn es mehrere / in einem Ausdruck ist, müssen wir noch mehr ctx.sync verwenden sie zu bewerten, was sehr mühsam ist (und vor allem schwer automatisch zu sein konstruiert).

So wäre es wirklich toll, entweder die Arbeitsblattfunktion oder eine Umgehung für / zu finden, so dass wir noch einen Ausdruck mit / in einem Schritt auswerten könnten.

PS: es scheint, dass es für +, keine Tabellenfunktion *, - entweder ist, aber wir konnten Abhilfen verwenden: sum für +, product für * und sum(..., product(-1, ...) für -.

Antwort

1

Eine Lösung, die eine Kombination aus der Funktion und die productpower Funktion mit dem Exponenten -1 zu verwenden ist. Diese Lösung funktioniert auch dann, wenn der Nenner (Divisor) eine Variable und keine Konstante ist.

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

In Ihrem spezielles Beispiel =SUM(2,SUM(30,40)/3) zu bewerten, würde der Code:

result = funcs.sum(2,funcs.product(funcs.sum(30,40),funcs.power(3,-1))); 
+0

...... smart ...... – SoftTimur

+0

Ich glaube nicht, dass ich gedacht hätte dieser Fähigkeit ohne Ihre Beiträge cript sowieso, also danke für das Hinzufügen einiger neuer Tricks zu unserem API-Arsenal :) –

+0

Sehr cool in der Tat. @SoftTimur, beachten Sie, dass diese Funktionen so verketten, dass jede Funktion das Ergebnis einer vorherigen Funktion akzeptiert, so dass Sie die Berechnung genau so durchführen können, wie Michael Saunders es oben geschrieben hat, mit nur einem einzigen ".load" und ".sync" Ende. –

1

Zumindest für Dividieren durch eine Konstante (beispielsweise 3), ist das nicht dasselbe wie product(something, .33333333)

+0

Ich weiß nicht, die Dividende und den Divisor ... So, jetzt, zu beantworten [meine vorherige Frage] (http://stackoverflow.com/questions/38329416/evaluate-a-sub-formula-of-a-formula), theoretisch könnten wir bei jeder Unterformel automatisch eine Zeichenfolge mit Arbeitsblattfunktionen erstellen und dann 'eval 'und' ctx.sync' ... froh zu wissen, dass es machbar ist ... danke für deine Hilfe ... – SoftTimur

Verwandte Themen