Различное поведение Word JS-api для локальной установки и версии браузера в #document.saved в только что открытом документе

Я создал расширение, которое периодически проверяет, был ли документ изменен. Это происходит с использованием интервала с функцией, использующей Word JS Api.

Согласно документации :

Указывает, были ли сохранены изменения в документе. Значение true указывает, что документ не изменился с момента его сохранения.

Внимание мое.

Пример кода:

setInterval(function () { isSaved(); }, 1000 );
export const isSaved  = async () => {
  return Word.run(async context => {
    const thisDocument = context.document;
    context.load(thisDocument, 'saved');

    await context.sync();

    // edited bellow code for reprodutibility
    console.log(thisDocument.saved);
  });
}

Когда существующий документ ничего не делает с ним, мы можем ожидать, что значение будет true, так как никаких изменений не произошло. Именно это происходит при открытии его в Word Online. Однако в моем локальном приложении Word он возвращает false.

Как заставить его вести себя так же? И почему он возвращает false, если документ не редактировался?


person Igor Galvão    schedule 08.09.2019    source источник


Ответы (1)


Одной из частых причин, по которой документ помечается как «грязный» после его открытия, но не редактирования, является обновление подключений к внешним источникам (например, связанная таблица или диаграмма Excel) и кодов полей.

Если, например, документ имеет поле Page в нижнем колонтитуле, оно будет обновлено при открытии документа. Даже если значение не изменится, пользовательский интерфейс Word все равно расценит это как изменение документа. Таким образом, его свойство saved устанавливается равным false.

Причина, по которой это не отображается в Word Online, заключается в том, что эта версия не поддерживает использование (вставку, редактирование или обновление) кодов полей. Word On-line не удаляет коды полей, присутствующие в документе, и может отображать результат вычисленного кода поля во время последнего сохранения документа. Но поскольку Word On-line не обновляет коды полей, свойство saved будет true в этой среде, если его нет в Word для Windows или Mac.

Единственный способ, которым значение может быть одинаковым для всех сред, — удалить любой контент, который обновляется, когда Word открывает документ. Коды полей можно «заблокировать», но не с помощью API-интерфейсов Office JS, которые не поддерживают коды полей (по иронии судьбы, поскольку они недоступны в Word Online).

person Cindy Meister    schedule 08.09.2019
comment
Спасибо, Синди. Очень интересный улов. Это может быть причиной для некоторых файлов. Однако я открыл новый пустой документ, написал тест и сохранил его как test.docx. Затем я закрыл Word и снова открыл тот же документ. Он по-прежнему отображается как измененный, но не имеет связи с внешними источниками. Такое ощущение, что проблема глубже. - person Igor Galvão; 09.09.2019
comment
@IgorGalvão Это также может иметь какое-то отношение к шаблону, из которого был создан документ (и все равно будет связан). Например, если документ был настроен на автоматическое обновление стилей или если в шаблоне есть какие-либо автоматические макросы. Это также может быть связано с любой надстройкой, работающей в среде Word... - person Cindy Meister; 09.09.2019