当前位置: 首页 > 面试题库 >

以JSON存取(新式,公开)Google工作表

骆文彬
2023-03-14
问题内容

如何通过JSON访问(新式)Google工作表的内容?我的目标是从JavaScript访问值,因此我需要能够通过HTTP下载JSON。

示例:如何以JSON
格式下载此工作表中的数据?

我试图通过网络搜索找到答案,但最终失败了:

  • 网络上的许多教程都是从key=...在URL中查找值的指令开始的。导出工作表时获得的URL是https://docs.google.com/spreadsheets/d/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/pubhtml?gid=1822753188&single=true,其中没有URL key=...

  • “访问公开的Google表格”的答案似乎表明我应该尝试https://docs.google.com/spreadsheets/d/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/export?format=csv&id=1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI&gid=1822753188获取CSV版本,但这对我而言不起作用:我得到的是登录页面而不是数据。

  • 我发现使用Google Apps脚本的方法,但是这些方法似乎需要用户在浏览器中进行某些操作,而不是提供下载链接。


问题答案:

如果要使用最新的API(v4),则需要执行以下操作:

  1. 生成电子表格API密钥(请参见下面的说明)。
  2. 使您的工作表可以公开访问。
  3. 使用以下形式的请求:
    https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/RANGE?key=API_KEY
    

然后,您将获得干净的JSON响应:

{
  "range": "Sheet1!A1:D5",
  "majorDimension": "ROWS",
  "values": [
    ["Item", "Cost", "Stocked", "Ship Date"],
    ["Wheel", "$20.50", "4", "3/1/2016"],
    ["Door", "$15", "2", "3/15/2016"],
    ["Engine", "$100", "1", "30/20/2016"],
    ["Totals", "$135.5", "7", "3/20/2016"]
  ],
}

请注意,如果要指定一个网页的全部内容,如标识Sheet1是完全有效的。

有关更多信息,请参见基础阅读。

从v4
API开始,所有请求都必须带有标识符(例如API密钥):

向Google Sheets API提出的公开数据请求必须带有标识符,该标识符可以是API密钥或访问令牌。

按照链接文档中的步骤在凭证页面上创建API密钥。

确保:

  1. 在Google Cloud Platform上创建一个新应用。
  2. 创建一个新的API密钥。
  3. 添加Google Sheets API。(API管理器>仪表板>启用API)

请注意,您仍然可以访问公共数据,而不必强制用户登录:

在新的Sheets API
v4中,没有显式的可见性声明。使用电子表格ID进行API调用。如果应用程序无权访问指定的电子表格,则返回错误。否则,呼叫继续进行。

请注意,您 并不 需要将表发布到网上。您需要做的就是确保 任何 知道 链接的人都 可以访问该工作表。

(即,当您单击Google Sheets API上的“ 创建凭据”
时,选择“其他非UI,用户数据”,并显示“无法从没有UI的平台访问用户数据,因为登录需要用户交互。”)安全地忽略该消息。API密钥是您真正需要的,因为这是公共数据。)

常见错误消息:

该请求缺少有效的API密钥。

您没有key=在通话中包含参数。

API密钥无效。请传递有效的API密钥。Google开发人员控制台

您提供了错误的API密钥。确保您正确键入了密钥。如果您还没有密钥,请转到Google开发人员控制台并创建一个。

找不到API密钥。请传递有效的API密钥。
Google开发者控制台API密钥

您的API密钥可能是正确的,但是您很可能没有添加Google表格权限。转到Google开发者控制台API密钥页面,然后添加表格权限。

呼叫者没有权限

您的工作表未设置为公开访问。



 类似资料:
  • 我使用脚本将数据从MySQL数据库导入到工作表中。在导入过程中,其他具有重公式的工作表(vlookup、sumifs、filter)会不断重新计算,因此需要花费很长时间。我想在MySQL数据完全导入后,通过脚本插入公式。 为了简化此过程,我想将工作表上的所有公式(这是一个很长的工作表)提取到一个文件中,并将提取的数据格式化为以下方式:示例:从工作表“摘要”中提取数据: 循环检查工作表中的每个单元格

  • 有没有一种方法可以加速在同一个谷歌工作表的多个选项卡上编辑数百行公式? 这是一个后续问题:Google Sheets中的引用随着新表单的提交而改变;这大约是每次Google Sheets中由Google窗体的新提交添加新行时,一些公式即使用(仍然不知道为什么会这样)。解决方法是在公式中添加。然而,公式太多,无法舒适地手动更改。 例如,我有如下公式: 它需要改为: 搜索和替换不起作用,因为公式的编写

  • 更新到谷歌表/java脚本...在下面的函数中,它正确地从源表中抓取数据,并在目的地的下一个可用单元格中正确地输入数据。但是,我在整个工作表的F列单元格中有一个公式。当getLastRow完成它的工作时,数据会被粘贴到工作表的下面。我需要在下面的函数中更改什么来忽略检查中的列F?

  • 是否有任何方法,使用脚本或其他方式,来评估谷歌电子表格中的连接公式? 我为Google Finance函数创建了一个连接公式,用于获取每日汇率。这是因为我的日期和货币不断变化;而不是“usdeur”,我有时对获取“usdinr”或“euraud”感兴趣。通过使用连接和一些基本脚本,我能够将下面的公式作为文本粘贴到单元格中。所需的只是执行以下字符串的方法。 据我所知,工作表不像Excel那样具有“E

  • 问题内容: 我怎样才能得到一个与事件 的公共 谷歌日历?我有,但是没有必要。我不想更改其事件,也无需登录。 我想从中获取一个与我的/ 数据库同步。 试过了 但出现登录错误: 问题答案: 您的日历必须 公开 共享 ! 如果您仅共享 忙/闲 状态,则此方法有效: 详细信息 -仅当日历完全公开共享时,此wotrks 或者只是 忙碌 参数 orderby , sortorder 和 futureevent