如何仅使用 Javascript 访问 Google Sheet 电子表格?

IT技术 javascript google-api google-sheets-api google-data-api google-api-js-client
2021-01-18 11:24:13

我只想使用 JavaScript 访问 Google 电子表格(没有 .NET、C#、Java 等)

我来到这里并惊讶地发现没有用于 JavaScript 的 API 来访问 Google 表格。

请告诉我如何使用 JavaScript 或其任何框架(如 jQuery)访问(创建/编辑/删除)Google 表格。

6个回答

我创建了一个简单的 javascript 库,它通过 JSON api 检索谷歌电子表格数据(如果它们已发布):

https://github.com/mikeymckay/google-spreadsheet-javascript

你可以在这里看到它的实际效果:

http://mikeymckay.github.com/google-spreadsheet-javascript/sample.html

Evan Plaice 的回答stackoverflow.com/a/8666573/42082有关于官方 Google Docs API 以及如何使用电子表格的更多详细信息。值得一看。
2021-03-22 11:24:13
这为我节省了大量时间。太感谢了!但是,我确实决定分叉您的代码,以便能够处理数据的空单元格,并将其组织成行(按原样返回的数据只是一个巨大的单元格数组,但由于空单元格不是考虑到,没有简单的方法来组织数据)。更新仅针对您的“callbackCells()”方法。检查一下:github.com/rw3iss/google-spreadsheet-javascript.git 再次感谢伙计!
2021-03-26 11:24:13
新版本 API 3.0 和 Oauth 2.0
2021-03-28 11:24:13
看起来谷歌改变了政策,现在已经坏了。
2021-04-02 11:24:13

2018 年 1 月更新:当我去年回答这个问题时,我忽略了使用 JavaScript 访问 Google API第三种方式,那就是使用客户端库的Node.js 应用程序,所以我在下面添加了它。

现在是2017 年 3 月,这里的大多数答案都已过时——现在接受的答案是指使用旧 API 版本的库。一个更新的答案:您只能使用 JavaScript访问大多数 Google APIGoogle 今天提供了 2 种(更正,3 种)方法来做到这一点:

  1. 正如Dan Dascalescu回答中提到的,您可以使用Google Apps Script,即 JavaScript-in-Google 的云解决方案。也就是说,在 Google 服务器上运行的浏览器之外的非 Node 服务器端 JS 应用程序。
  1. 您还可以使用适用于 JavaScriptGoogle API 客户端库在客户端访问最新的Google Sheets REST API
  1. 使用 JavaScript 访问 Google API 的第三种方式来自服务器Node.js 客户端库它的工作方式类似于使用上面描述的 JavaScript(客户端)客户端库,只是您将从服务器端访问相同的 API。这是表格的 Node.js 快速入门示例您可能会发现上面基于 Python 的视频更有用,因为它们也从服务器端访问 API。

使用 REST API 时,您需要管理和存储您的源代码,并通过滚动您自己的身份验证代码来执行授权(请参阅上面的示例)。Apps Script 代表您处理这个问题,管理数据(减少 Ape-in​​ago 在他们的回答中提到的“痛苦” ),并且您的代码存储在 Google 的服务器上。但是您的功能仅限于 App Script 提供的服务,而 REST API 为开发人员提供了更广泛的 API 访问权限。但是,嘿,有选择是件好事,对吧?总之,要回答 OP 原始问题,而不是零,开发人员可以通过三种方式使用 JavaScript 访问 Google 表格。

这是要点。

您可以使用Google Sheets API创建电子表格目前无法使用 API 删除电子表格(阅读文档)。将 Google Docs API 视为创建和查找文档的途径。

您可以使用基于工作表的提要在电子表格中添加/删除工作

通过基于列表的提要基于单元格的提要来更新电子表格

可以通过上面提到的 Google 电子表格 API 读取电子表格,也可以通过使用Google Visualization API 查询语言查询数据(可以返回 CSV、JSON 或 HTML 表格格式的结果)来完成,仅对于已发布的表格。


忘记 jQuery。jQuery 只有在遍历 DOM 时才真正有value。由于 GAS(Google Apps Scripting)不使用 DOM,jQuery 不会为您的代码增加任何value。坚持香草。

我真的很惊讶还没有人在答案中提供这些信息。不仅可以完成,而且使用 vanilla JS 相对容易。唯一的例外是 Google Visualization API,它相对较新(截至 2011 年)。可视化 API 还专门通过 HTTP 查询字符串 URI 工作。

有一种不需要发布电子表格的解决方案。但是,该工作表确实需要“共享”。更具体地说,需要以任何拥有链接的人都可以访问电子表格的方式共享工作表。完成此操作后,就可以使用 Google Sheets HTTP API。

首先,您需要一个 Google API 密钥。前往此处:https : //developers.google.com/places/web-service/get-api-key NB。请注意公开 API 密钥的安全后果:https : //support.google.com/googleapi/answer/6310037

获取电子表格的所有数据 - 警告,这可能是大量数据。

https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/?key={yourAPIKey}&includeGridData=true

获取工作表元数据

https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/?key={yourAPIKey}

获取一系列单元格

https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{sheetName}!{cellRange}?key={yourAPIKey}

现在有了这些信息,就可以使用 AJAX 来检索数据,然后在 JavaScript 中对其进行操作。我建议使用axios

var url = "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/?key={yourAPIKey}&includeGridData=true";                                                             
axios.get(url)
  .then(function (response) {
    console.log(response);                                                                                                                                                    
  })
  .catch(function (error) {
    console.log(error);                                                                                                                                                       
  });                
什么是网格数据?
2021-03-18 11:24:13
@WilliamEntriken 单元格的内容。
2021-03-22 11:24:13

2016 更新:最简单的方法是使用 Google Apps Script API,尤其是SpreadSheet Service这适用于私人工作表,与需要发布电子表格的其他答案不同。

这将使您可以将 JavaScript 代码绑定到 Google 表格,并在打开表格或选择菜单项(您可以定义)时执行它。

这是一个快速入门/演示代码如下所示:

// Let's say you have a sheet of First, Last, email and you want to return the email of the
// row the user has placed the cursor on.
function getActiveEmail() {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var activeRow = .getActiveCell().getRow();
  var email = activeSheet.getRange(activeRow, 3).getValue();

  return email;
}

您还可以发布诸如 Web 应用程序之类的脚本