无法在Office加载项的Ribbon ExecuteFunction命令中存储JS值

时间:2016-07-22 08:47:13

标签: office365 office365api office-js office365-apps

我通过Manifest和Functionfile将Javascript函数连接到Excel Ribbon图标。

这是我的FunctionFile:

SelectionChanged

现在,当我单击功能区图标时,它会将42输出到Javascript控制台。但是,当我尝试再次运行它时,没有任何反应。这是一个错误吗?

1 个答案:

答案 0 :(得分: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) {});
}    

-Michael Saunders,办公室主任