Совместное редактирование в надстройках Excel

Благодаря функции совместного редактирования несколько человек могут работать вместе и редактировать одну и ту же книгу Excel одновременно. Все соавторы книги могут видеть изменения, внесенные и сохраненные другими соавторами. Чтобы книги Excel можно было совместно редактировать, они должны храниться в OneDrive, OneDrive для бизнеса или SharePoint Online.

Важно!

В Excel для Microsoft 365 вы увидите автосохранение в левом верхнем углу. Если автосохранение включено, соавторы видят внесенные вами изменения в режиме реального времени. Учтите влияние такого поведения на макет вашей надстройки Excel. Пользователи могут выключить автосохранение с помощью переключателя в левом верхнем углу окна Excel.

Общие сведения о совместном редактировании

Когда вы меняете содержимое книги, Excel автоматически синхронизирует эти изменения для всех соавторов. Вносить изменения в содержимое книги могут не только соавторы, но и код в надстройке Excel. Например, при выполнении следующего кода JavaScript в надстройке Office значение диапазона задается в Contoso.

range.values = [['Contoso']];

После того как книга со значением "Contoso" синхронизируется для всех соавторов, новое значение диапазона будет доступно всем пользователям и надстройкам, выполняемым в той же книге.

Функция совместного редактирования синхронизирует содержимое только общей книги. Значения, скопированные из книги в переменные JavaScript в надстройке Excel, не синхронизируются. Например, если надстройка хранит значение ячейки (например, "Contoso") в переменной JavaScript, а соавтор заменяет его на "Пример", после синхронизации все соавторы увидят в ячейке значение "Пример". Но для ячейки в переменной JavaScript по-прежнему будет задано значение "Contoso". Кроме того, когда несколько соавторов используют одну и ту же надстройку, у каждого соавтора есть своя, не синхронизированная с остальными, копия переменной. Перед работой с переменными, использующими содержимое книги, убедитесь, что все значения в книге обновлены.

Использование событий для управления состоянием надстройки в памяти

Надстройки Excel могут читать содержимое книги (из скрытых листов и объекта параметра), а затем хранить его в таких структурах данных как переменные. После того как исходные значения скопированы в любую из структур данных, соавторы могут обновить исходное содержание книги. Это означает, что теперь скопированные значения в структурах данных не синхронизируются с содержимым книги. При создании надстроек необходимо учитывать это разделение содержания книги и значений, хранящихся в структурах данных.

Например, вы можете создать надстройку контента, которая отображает пользовательские визуализации. Состояние ваших пользовательских визуализаций может быть сохранено в скрытом листе. Если соавторы используют одну и ту же книгу, может произойти следующий сценарий.

  • Пользователь A открывает документ, и пользовательские визуализации отображаются в книге. Пользовательские визуализации читают данные из скрытого листа (например, задан синий цвет визуализации).
  • Пользователь Б открывает тот же документ, начинает изменять пользовательские визуализации и в качестве цвета для них задает оранжевый. Оранжевый цвет сохраняется в скрытом листе.
  • Скрытый лист пользователя А обновляется с учетом оранжевого цвета.
  • Специальные элементы визуализации пользователя А по-прежнему синие.

Чтобы специальные элементы визуализации пользователя А соответствовали изменениям, внесенным соавторами на скрытом листе, используйте событие BindingDataChanged. Это обеспечит отражение изменений, внесенных соавторами в содержимое книги, в вашей надстройке.

Предостережения, касающиеся использования событий для совместного редактирования

Как описано выше, в некоторых сценариях применение триггеров события для всех соавторов обеспечивает улучшенное взаимодействие с пользователем. Однако, имейте ввиду, что в ряде сценариев такое поведение может привести к неудобствам в работе пользователей.

Например, обычно в сценариях проверки данных пользовательский интерфейс отображается в ответ на события. Событие BindingDataChanged, описанное в предыдущем разделе, выполняется когда локальный пользователь или соавтор (удаленный) изменяет содержимое книги в пределах привязки. Если обработчик BindingDataChanged событий события отображает пользовательский интерфейс, пользователи увидят пользовательский интерфейс, который не связан с изменениями, над которыми они работали в книге, что приводит к ухудшению взаимодействия с пользователем. Избегайте отображения пользовательского интерфейса при использовании событий в вашей надстройке.

Предотвращение конфликтов совместного редактирования строк таблицы

Это известная проблема, из-за чего вызовы API могут вызвать конфликты совместного TableRowCollection.add редактирования. Мы не рекомендуем использовать этот API, если предполагается, что надстройка будет запущена, когда другие пользователи редактируют книгу надстройки (в частности, если они редактируют таблицу или любой диапазон в таблице). Приведенные ниже рекомендации помогут избежать проблем с методом TableRowCollection.add (и избежать запуска желтой полосы Excel, которая предлагает пользователям обновиться).

  1. Используйте Range.values вместо TableRowCollection.add. Задание значений Range непосредственно под таблицей автоматически расширяет таблицу. В противном случае добавление строк таблицы через Table API приводит к конфликтам слияния для пользователей-соавторов.
  2. Правила проверки данных не должны применяться к ячейкам под таблицей, если только проверка данных не применяется ко всему столбцу.
  3. Если в таблице есть данные, надстройка должна обработать их, прежде чем задавать значение диапазона. Использование Range.insert для вставки пустой строки приведет к перемещению данных и освободить место для расширяющейся таблицы. В противном случае вы рискуете перезаписать ячейки под таблицей.
  4. Нельзя добавить пустую строку в таблицу с Range.valuesпомощью . Таблица автоматически расширяется, только если данные присутствуют в ячейках непосредственно под таблицей. Используйте временные данные или скрытые столбцы в качестве обходного решения для добавления пустой строки таблицы.

См. также