Следующие шаги объясняют процесс вставки данных в электронную таблицу по внешней ссылке в Сервере документов.
Ознакомьтесь с функционалом более подробнее здесь.

  1. Пользователь копирует значение ячейки в буфер обмена из редактора документов исходной таблицы. В то же время копируются также и специальные данные.
  2. Пользователь вставляет скопированные данные в редактор документов целевой таблицы.
  3. Редактор документов запрашивает ссылку на исходный файл, отправляя данные менеджеру документов.
  4. Менеджер документов отправляет ссылку на исходную таблицу редактору документов.
  5. Редактор документов отправляет запрос в службу редактирования документов на загрузку электронной таблицы.
  6. Служба редактирования документов загружает исходную таблицу из службы хранения документов.
  7. Служба редактирования документов отправляет все необходимые данные для отображения в редакторе документов целевой таблицы.

Как это реализовать на практике.

    1. Создайте исходную таблицу, из которой будут скопированы данные.
    2. Укажите параметр document.referenceData в конфигурации инициализации исходной таблицы:
      var docEditor = new DocsAPI.DocEditor("placeholder", {
          "document": {
              "referenceData": {
                  "fileKey": "BCFA2CED",
                  "instanceId": "https://example.com"
              },
              ...
          },
          ...
      });
    3. Когда пользователь копирует данные из исходной таблицы, в буфер обмена попадает список следующих значений:
      a. имя листа и диапазон, из которого были скопированы данные, которые будут использоваться позже для обновления скопированных данных;
      b. объект document.referenceData, который будет использоваться для проверки возможности вставки данных в целевую таблицу по внешней ссылке;
      c. имя файла, которое будет использоваться для отображения формулы в редакторе.
    4. Создайте целевую таблицу, куда будут вставлены внешние данные.
    5. Укажите обработчик событий onRequestReferenceData в конфигурации инициализации целевой электронной таблицы, чтобы отображались кнопки «Вставить ссылку» и «Обновить значения»:
      var docEditor = new DocsAPI.DocEditor("placeholder", {
          "events": {
              "onRequestReferenceData": onRequestReferenceData,
              ...
          },
          ...
      });
    6. Если в буфере обмена имеются данные исходной электронной таблицы, указанные на шаге 3, а в целевой электронной таблице есть обработчик событий onRequestReferenceData в конфигурации инициализации, то в диалоговом окне отображается кнопка Вставить связь.
    7. Когда пользователь нажимает кнопку «Вставить связь», формула вставляется в текущую ячейку, а объект referenceData сохраняется в файл назначения. Вставленная формула отображается следующим образом:
      ='[fileName]sheetName'!cell
      
      Параметр Описание Тип Пример
      cell Ячейка, из которой были скопированы данные. string E5
      fileName Имя файла, из которого были скопированы данные. string new.xlsx
      sheetName Имя листа, из которого были скопированы данные. string Sheet1

      Запрос на обновление данных в файле будет отправлен на URL-адрес файла.

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

    8. Когда пользователь пытается обновить данные из исходного файла, нажав кнопку «Обновить значения» в диалоговом окне «Внешние ссылки» на вкладке «Данные», вызывается событие onRequestReferenceData. В параметре данных передается объект с уникальными данными файла, полученными из исходного файла, а также путь или имя файла.Чтобы отправить данные в метод setReferenceData, рекомендуется сначала выполнить поиск файла по параметру referenceData. Если такого поля нет или файл не найден, то используется параметр пути.
      var onRequestReferenceData = function (event) {
          var referenceData = event.data.referenceData;
          var path = event.data.path;
          ...
      };
    9. Чтобы обновить данные из исходного файла, необходимо вызвать метод setReferenceData. При вызове этого метода необходимо добавить токен для проверки параметров.Обратите внимание, что этот метод выполняется только в том случае, если у пользователя есть разрешения на исходный файл.
      docEditor.setReferenceData({
          "fileType": "xlsx",
          "path": "sample.xlsx",
          "referenceData": {
              "fileKey": "BCFA2CED",
              "instanceId": "https://example.com"
          },
          "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmaWxlVHlwZSI6Inhsc3giLCJwYXRoIjoic2FtcGxlLnhsc3giLCJyZWZlcmVuY2VEYXRhIjp7ImZpbGVLZXkiOiJCQ0ZBMkNFRCIsImluc3RhbmNlSWQiOiJodHRwczovL2V4YW1wbGUuY29tIn0sInVybCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vdXJsLXRvLWV4YW1wbGUtZG9jdW1lbnQueGxzeCJ9.UXosmM-E_Cu9j9QGSlcj9FEoSu5m-zCS4b6FxO_2k7w",
          "url": "https://example.com/url-to-example-document.xlsx"
      });

      Где example.com — это имя сервера, на котором установлен менеджер документов и служба хранения документов.