Office365 Can';t跨功能区存储JS值用于Office加载项的ExecuteFunction命令

Office365 Can';t跨功能区存储JS值用于Office加载项的ExecuteFunction命令,office365,office365api,office-js,office365-apps,Office365,Office365api,Office Js,Office365 Apps,我正在通过清单和函数文件将Javascript函数连接到Excel功能区图标 这是我的函数文件: (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

我正在通过清单和函数文件将Javascript函数连接到Excel功能区图标

这是我的函数文件:

(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++;
}

现在,当我单击功能区图标时,它会将put 42打印到Javascript控制台。然而,当我尝试再次运行它时,什么都没有发生。这是错误吗?

每次单击命令时,Excel都会创建一个新的web进程。因此,
i
将在每次单击时初始化为42。控制台每次都会继续记录42

在后续单击中看不到任何内容的原因可能是您已将调试器设置为监视特定进程。如果更改
console.log(i)
到类似于Office.context.document.setSelectedDataAsync(i)的东西,无需调试器即可快速查看此结果

为了获得所需的持久变量,应使用如下对象将它们存储在文档中:

(函数(){
Office.initialize=函数(原因){
var i=42;
if(Office.context.document.settings.get(“storedI”){
i=Office.context.document.settings.get(“storedI”);
}
否则{
Office.context.document.settings.set(“storedI”,i);
Office.context.document.settings.saveAsync(函数(asyncResult){});
}
};
})();    
函数undo(){
控制台日志(i);
i++;
Office.context.document.settings.set(“storedI”,i);
Office.context.document.settings.saveAsync(函数(asyncResult){});
}    
-迈克尔·桑德斯,办公室下午