2016-07-22 14 views
1

Javascript関数をマニフェストと関数ファイルを使用してExcelリボンアイコンに接続しています。OfficeアドインのリボンExecuteFunctionコマンドにJS値を格納できません

これは私のFunctionFileです:

(function() { 
    Office.initialize = function (reason) { 
     //If you need to initialize something you can do so here. 
    }; 

})(); 

var i = 42; 

//Notice function needs to be in global namespace 
function undo() { 
    console.log(i); 
    i++; 
} 

私はリボンのアイコンをクリックすると、それはJavaScriptコンソールに42を入れて印刷します。しかし、別の時間にそれを実行しようとすると、何も起こりません。それはバグですか?

答えて

1

Excelは、コマンドをクリックするたびに新しいWebプロセスを作成します。その結果、iは、クリックごとに42で初期化されます。そして、コンソールは毎回ログ42を記録し続けます。

次回のクリックで何も表示されない理由は、デバッガが特定のプロセスを監視するように設定しているためです。 console.log(i);Office.context.document.setSelectedDataAsync(i);のように変更すると、デバッガなしですぐにこの結果が表示されます。

(function() { 
    Office.initialize = function (reason) { 
     var i = 42; 
     if(Office.context.document.settings.get("storedI"){ 
      i = Office.context.document.settings.get("storedI"); 
     } 
     else{ 
      Office.context.document.settings.set("storedI", i); 
      Office.context.document.settings.saveAsync(function (asyncResult) {}); 
     } 
    }; 
})();  

function undo() { 
    console.log(i); 
    i++; 
    Office.context.document.settings.set("storedI", i); 
    Office.context.document.settings.saveAsync(function (asyncResult) {}); 
}  

-Michaelサンダース、オフィス

用PM:

したい固定変数を達成するために、あなたはこのようなSettingsオブジェクトを使用してドキュメントに保存する必要があります

関連する問題