Google Sheets API: как "опубликовать в интернете" для встраиваемого листа?

Если бы я хотел опубликовать таблицу Google Таблиц, чтобы я мог вставить ее на страницу в iframe, я бы вручную сделал следующее:

  1. перейдите на Google Диск
  2. откройте таблицу
  3. File > Publish to Web > Embed > скопируйте созданную ссылку iframe в html-файл

как бы я программно достиг вышеуказанного через Google Sheets API, используя JavaScript на переднем конце? Я генерации таблиц на муха в моем приложении и хотите сразу же вставить их на страницу после создания.

после создания листа я могу динамически создавать элемент iframe с необходимыми атрибутами (среди прочего, идентификатор листов). Это вызывает ошибку. От этого вопрос, похоже, что лист должен иметь published: true атрибут или что - то еще, но это требует использования API диска-я пытаюсь избежать этого. Возможно ли это обработать только через API для листов?

2 ответов


после поиска по всему API листов, googling и просто общего поиска души, у меня не было выбора, кроме как Включить API диска и использовать его для выполнения моих заявок. Вот решение, которое я придумал. Надеюсь, это поможет кому-то еще!

использовал этот скрипт из Google для клиентской библиотеки JS в :

<body>
  ...
  <script type="text/javascript" src="https://apis.google.com/js/client.js"></script>
</body>

тогда для материалов JS:

// Cache the api's into variables.
var sheets = gapi.client.sheets;
var drive = gapi.client.drive;

// 1. CREATE NEW SPREADSHEET
sheets.spreadsheets.create({
  properties: {
    title: 'new-sheet'
  }
}).then(function(newSpreadSheet) {
  var id = newSpreadSheet.result.spreadsheetId;

  // 2. PUBLISH SPREADSHEAT VIA DRIVE API
  drive.revisions.update({
    fileId: id,
    revisionId: 1
  }, {
    published: true, // <-- This is where the magic happens!
    publishAuto: true
  }).then(function() {

    // 3. DISPLAY SPREADSHEET ON PAGE VIA IFRAME
    var iframe = [
      '<iframe ',
      'src="https://docs.google.com/spreadsheets/d/',
      id,
      '/pubhtml?widget=true&headers=false&embedded=true"></iframe>'
    ].join('');

    // We're using jQuery on the page, but you get the idea.
    $('#container').html($(iframe));
  });
});

Как вы заключили, это невозможно через API листов сегодня и возможно только через API диска (используя PATCH https://www.googleapis.com/drive/v3/files/fileId/revisions/revisionId запрос, задокументированный в https://developers.google.com/drive/v3/reference/revisions/update).