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


101

我只想使用JavaScript来访问Google Spreadsheets(不能使用.NET,C#,Java等)

我来到这里时,很震惊地得知没有JavaScript API可以访问Google表格。

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


1
您提供的链接包含有关使用JSON的信息。您应该能够在JavaScript中使用它。
GSto 2010年

1
@GSto,如果您可以向我提供一些有关此的见解,将很有帮助。请再次致电我,我想通过javascript访问google电子表格。谢谢。
Pratik


可能要考虑使用Sheetsu。对于JSON API而言,这相当简单,并且受免费版本的限制,但是它确实简化了任何开发人员使用Google电子表格所需要的内容。希望这对某些人有帮助。
小丑

Answers:


60

我创建了一个简单的JavaScript库,该库通过JSON API检索Google电子表格数据(如果已发布):

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

您可以在此处查看其运行情况:

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


3
这节省了我很多时间。非常感谢!但是,我确实决定分叉代码,以便能够处理空数据单元,并将其组织成行(按原样返回的数据只是一个巨大的单元数组,但是由于空单元考虑到这一点,没有简单的方法来组织数据)。更新只是针对您的'callbackCells()'方法。看看:github.com/rw3iss/google-spreadsheet-javascript.git 再次感谢您!
瑞安·魏斯

5
Evan Plaice的答案stackoverflow.com/a/8666573/42082提供了有关官方Google Docs API以及如何使用电子表格的更详细的信息。值得一看。
Ape-in​​ago

新版本的API 3.0和OAuth 2.0用户
PreguntonCojoneroCabrón

看起来Google更改了政策,现在已被打破。
Chirag

50

2018年1月更新:去年我回答这个问题时,我没有提及使用JavaScript来访问Google API 的第三种方法,这是通过使用客户端库的Node.js应用程序进行,因此在下面添加了它。

这是2017年3月,和大部分的答案在这里已经过时-接受的答案,现在指的是使用旧的API版本的库。最新的答案:您只能使用JavaScript 访问大多数Google API。Google提供了3种方法来做到这一点:

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

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


35

这是要点。

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

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

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

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


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

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


13

有一种解决方案不需要发布电子表格。但是,工作表确实需要“共享”。更具体地说,需要以一种方式来共享工作表,以便任何具有链接的人都可以访问电子表格。完成此操作后,即可使用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);                                                                                                                                                       
  });                

什么是网格数据?
William Entriken

@WilliamEntriken单元格的内容。
robsco

11

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应用程序


6

编辑:这是在发布Google文档的api之前得到的答复。有关最新信息,请参见 Evan Plaice的答案 Dan Dascalescu的答案

看起来好像可以,但是使用起来很痛苦。它涉及使用Google数据API。

http://gdatatips.blogspot.com/2008/12/using-javascript-client-library-w-non.html

“ JavaScript客户端库具有用于Calendar,Contacts,Blogger和Google Finance的帮助程序方法。但是,您几乎可以将其与任何Google Data API一起使用,以访问经过身份验证的/专用Feed。此示例使用DocList API。”

以及编写与电子表格连接的小工具的示例:http : //code.google.com/apis/spreadsheets/gadgets/


为什么您称其为“疼痛”。这样做有什么害处?
Pratik

1
很痛苦,因为它没有本机api,这意味着您需要自己做很多解析和数据操作。本机电子表格api会为您提供这些信息。
Ape-in​​ago 2010年

4

“ JavaScript访问Google文档”的实现非常繁琐,此外,获取Google文档也不是那么简单。我分享了一些不错的链接,通过这些链接您可以实现js对gdoc的访问:

http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#UploadingDocs

http://code.google.com/apis/spreadsheets/gadgets/

http://code.google.com/apis/gdata/docs/js.html

http://www.mail-archive.com/google-help-dataapi@googlegroups.com/msg01924.html

也许这些可以帮助您。


8
链接1将被弃用2015年4月20日,链接2 404错误,链接3 v2.0被弃用,链接4被弃用
vladkras 2014年





1

您可以使用RGraph表格连接器以JavaScript读取Google表格电子表格数据:

https://www.rgraph.net/canvas/docs/import-data-from-google-sheets.html

最初(几年前),它依靠一些RGraph函数来发挥其魔力-但现在它可以独立运行(即不需要RGraph公共库)。

一些示例代码(此示例制作了RGraph图表):

<!-- Include the sheets library -->
<script src="RGraph.common.sheets.js"></script>

<!-- Include these two RGraph libraries to make the chart -->
<script src="RGraph.common.key.js"></script>
<script src="RGraph.bar.js"></script>

<script>
    // Create a new RGraph Sheets object using the spreadsheet's key and
    // the callback function that creates the chart. The RGraph.Sheets object is
    // passed to the callback function as an argument so it doesn't need to be
    // assigned to a variable when it's created
    new RGraph.Sheets('1ncvARBgXaDjzuca9i7Jyep6JTv9kms-bbIzyAxbaT0E', function (sheet)
    {
        // Get the labels from the spreadsheet by retrieving part of the first row
        var labels = sheet.get('A2:A7');

        // Use the column headers (ie the names) as the key
        var key = sheet.get('B1:E1');

        // Get the data from the sheet as the data for the chart
        var data   = [
            sheet.get('B2:E2'), // January
            sheet.get('B3:E3'), // February
            sheet.get('B4:E4'), // March
            sheet.get('B5:E5'), // April
            sheet.get('B6:E6'), // May
            sheet.get('B7:E7')  // June
        ];

        // Create and configure the chart; using the information retrieved above
        // from the spreadsheet
        var bar = new RGraph.Bar({
            id: 'cvs',
            data: data,
            options: {
                backgroundGridVlines: false,
                backgroundGridBorder: false,
                xaxisLabels: labels,
                xaxisLabelsOffsety: 5,
                colors: ['#A8E6CF','#DCEDC1','#FFD3B6','#FFAAA5'],
                shadow: false,
                colorsStroke: 'rgba(0,0,0,0)',
                yaxis: false,
                marginLeft: 40,
                marginBottom: 35,
                marginRight: 40,
                key: key,
                keyBoxed: false,
                keyPosition: 'margin',
                keyTextSize: 12,
                textSize: 12,
                textAccessible: false,
                axesColor: '#aaa'
            }
        }).wave();
    });
</script>

现在有了导入实用程序的PHP版本-在相同的URL上可用
理查德

0

我正在建立斯坦因来帮助您做到这一点。如果您希望直接从工作表中显示数据,它还提供了仅HTML的解决方案。在steinhq.com上查看。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.