2016-07-22 47 views
1

我通過Manifest和Functionfile將Javascript函數連接到Excel Ribbon Ribbon Icon。不能跨Office Ribbon加載項的Ribbon 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++; 
} 

現在,當我點擊絲帶圖標,它打印放42到JavaScript控制檯。但是,當我嘗試再次運行它時,沒有任何反應。這是一個錯誤?

回答

1

Excel每次單擊命令時都會創建一個新的Web進程。因此,每次點擊後,i將初始化爲42。並且控制檯每次都會繼續記錄42。

之所以在隨後的點擊中看不到任何內容,可能是因爲您已將您的調試器設置爲監視特定進程。如果將console.log(i);更改爲Office.context.document.setSelectedDataAsync(i);之類的內容,則可以在沒有調試器的情況下快速查看此結果。

爲了達到所需的持久性變量,你應該使用Settings對象這樣它們存儲在文件中:

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

- 邁克爾·桑德斯,PM辦公