Не удается сохранить значения 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) {});
}    

-Майкл Сондерс, премьер-министр для офиса

Другие вопросы по тегам