Не удается сохранить значения JS для команд ExecuteFunction ленты для надстроек Office
Я подключаю функцию Javascript к значку ленты Excel через Манифест и Функциональный файл.
Это мой 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 создает новый веб-процесс каждый раз, когда нажимается команда. В следствии, 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) {});
}
-Майкл Сондерс, премьер-министр для офиса