【问题标题】:Can't store JS values across Ribbon ExecuteFunction Commands for Office add-ins无法在 Office 加载项的功能区 ExecuteFunction 命令中存储 JS 值
【发布时间】:2016-07-22 08:47:13
【问题描述】:
我正在通过 Manifest 和 Functionfile 将 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 控制台。但是,当我尝试再次运行它时,什么也没有发生。这是一个错误吗?
【问题讨论】:
标签:
office365
office365api
office-js
office365-apps
【解决方案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,办公室产品经理