Google 工作表 API:如何 "publish to web" 嵌入 sheet?

Google Sheets API: How to "publish to web" for embeddable sheet?

如果我想发布一个 Google Sheets spreadsheet 以便我可以将它嵌入到 iframe 中的页面上,我将手动执行以下操作:

  1. 导航到 Google 驱动器
  2. 打开价差sheet
  3. 文件 > 发布到 Web > 嵌入 > 将生成的 iframe link 复制到 html 文件中

如何在前端使用 JavaScript 通过 Google Sheets API 以编程方式实现上述目标?我在我的应用程序中即时生成传播sheets,并希望在创建后立即将它们嵌入到页面中。

创建 sheet 后,我可以动态创建具有必要属性(sheet 的 ID 等)的 iframe 元素。这会引发错误。从这个 question 看来,sheet 需要具有 published: true 属性或其他东西,但这需要使用驱动器 API - 我试图避免这种情况。是否可以通过工作表 API?

仅处理

正如您得出的结论,今天无法通过表格 API,只能通过驱动器 API(使用 PATCH https://www.googleapis.com/drive/v3/files/fileId/revisions/revisionId 请求,记录在 https://developers.google.com/drive/v3/reference/revisions/update).

在搜索整个表格 API、谷歌搜索和一般的自我反省之后,我别无选择,只能包括驱动器 API 并用它来完成我的命令。这是我想出的解决方案。希望这对其他人有帮助!

将 Google 中的此脚本用于 index.html 文件中的客户端 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));
  });
});