2016-05-26 14 views
1

次のシナリオを実現します:ユーザーが数式を保持するセルを選択し、アドインのtestボタンをクリックしてから、test関数が選択されたセルの数式を読み取り、それに+RAND()を追加し、ワークブックに書き戻します。選択したセルの数式を追加します

次のコードは、選択したセルの式を正しく読み込みますが、正しく書き戻されません。私はreturn ctx.sync()が正しく使用されているかどうかわかりません。

また、シナリオ全体でgetSelectedDataAsyncsetSelectedDataAsyncgetSelectedRangeではなく)を使用する必要があるかどうかはわかりません。

助けてもらえますか?

(function() { 
    "use strict"; 

    Office.initialize = function(reason) { 
     $(document).ready(function() { 
      app.initialize(); 
      $('#test').click(test); 
     }); 
    } 
    ; 

    function test() { 
     Excel.run(function(ctx) { 
      var selectedRange = ctx.workbook.getSelectedRange(); 
      selectedRange.load(["formulas"]); 
      return ctx.sync().then(function() { 
       console.log(selectedRange.formulas[0][0]); 
       var x = selectedRange.formulas[0][0] + "+RAND()"; 
       selectedRange.formulas[0][0] = x; 
       return ctx.sync(); 
      }) 
     }).then(function() { 
      console.log("done"); 
     }).catch(function(error) { 
      console.log("Error: " + error); 
     }); 
    } 
})(); 

答えて

2

バグは、数式コンテキストオブジェクトの個々の要素に割り当てようとしていることです。代わりに使用します。

selectedRange.formulas = x; 

または

selectedRange.formulas = [[x]]; 
+0

は...ありがとう、どのケースで我々はgetSelectedRange' 'ではなく' getSelectedDataAsync'と 'setSelectedDataAsync'を使用する必要がありますか? – SoftTimur

+1

getSelectedRangeを使用する理由はいくつかあります。あなたの目的のために、setSelectedDataAsyncとgetSelectedDataAsyncは数式のみの値をサポートしていません。 getSelectedRangeを使用する別の一般的な理由は、単一の非同期呼び出しで複数の読み取り/書き込み操作を可能にするのに対し、getSelectedDataAsyncおよびsetSelectedDataAsyncは呼び出しごとに1つしか実行できません。 getSelectedRangeを回避する唯一の理由は、Excel 2013などのAPIがサポートされていない場所でアドインを使用する必要がある場合です。 –

+0

提案を試したところ、 'return ctx.sync();'、それでも動作しました。だから本当に必要なのでしょうか? – SoftTimur

関連する問題