Google Sheets API:如何为可嵌入工作表“发布到网络”?
Posted
技术标签:
【中文标题】Google Sheets API:如何为可嵌入工作表“发布到网络”?【英文标题】:Google Sheets API: How to "publish to web" for embeddable sheet? 【发布时间】:2016-11-26 19:13:09 【问题描述】:如果我想发布 Google 表格电子表格以便将其嵌入到 iframe 内的页面中,我会手动执行以下操作:
-
导航到 Google 云端硬盘
打开电子表格
文件 > 发布到 Web > 嵌入 > 将生成的 iframe 链接复制到 html 文件中
如何在前端使用 javascript 通过 Google Sheets API 以编程方式实现上述目标?我正在我的应用程序中动态生成电子表格,并希望在创建后立即将它们嵌入到页面中。
创建工作表后,我可以动态创建具有必要属性(工作表 ID 等)的 iframe 元素。这会引发错误。从这个question,看起来工作表需要有published: true
属性或其他东西,但这需要使用Drive API - 我试图避免这种情况。这是否可以通过 Sheets API 处理only?
【问题讨论】:
【参考方案1】:在搜索了整个 Sheets API、谷歌搜索和一般的灵魂搜索之后,我别无选择,只能包含 Drive API 并使用它来进行竞标。这是我想出的解决方案。希望这对其他人有帮助!
在index.html
文件中使用来自 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));
);
);
【讨论】:
你在哪里运行这个?在 Google Apps 脚本项目中?我正在尝试做与您相同的事情,但来自 Google Apps 脚本项目。 @IMTheNachoMan 已经有一段时间了,但我相信这是在 Node 中,逻辑在 Express 路由后面。但我也在 Apps Script 中做了大量的工作。在 Apps Script 中有不同的 API 可以与 Google 产品进行交互。查看文档。对我来说已经有一段时间了。 谁能有一个使用 Python 的例子? 您的回答对我有帮助,谢谢。但是,在我的浏览器显示 iframe 之前,我还必须提供`publishedOutsideDomain: true` 【参考方案2】:正如您所得出的结论,目前无法通过 Sheets API 实现,只能通过 Drive API 实现(使用 PATCH https://www.googleapis.com/drive/v3/files/fileId/revisions/revisionId
请求,记录在 https://developers.google.com/drive/v3/reference/revisions/update)。
【讨论】:
谢谢。是的,我最初对 OAuth 的东西有疑问,并且让 Sheets & Drive api 的表现都很好。我在网上找不到我想做的完整示例,所以我最终想通了(下)。再次感谢! 这是否意味着无法使用任何 API 从 Google 表格电子表格中仅发布一张表格(即选项卡)?表格中的手动“发布到网络”菜单项可以选择按名称发布“整个文档”或单个选项卡/工作表,但大概 Drive API 对表格的了解不够,只能指定一个一个要发布? @MikeShulman 我认为无论您如何发布,它都会发布整个文档。 URL 决定了返回的内容。我刚刚做了一个测试,我用 2 张纸创建了一张纸。我只共享了一张工作表,但我可以通过更改其中一个 URL 参数来访问另一张工作表。以上是关于Google Sheets API:如何为可嵌入工作表“发布到网络”?的主要内容,如果未能解决你的问题,请参考以下文章
如何为基于 Woocommerce 的网站嵌入 Google Adwords 编辑器
使用 Google Sheets API 将图像插入 Google Sheets 单元格
如何为 Google Places API 自动完成文本框设置默认值