如何从Google Sheet API导出csv?

时间:2016-06-08 14:35:17

标签: google-sheets r-googlesheets google-sheets-api

我找不到任何API,可以让Rest API客户端将现有的Google表格导出到csv文件。

https://developers.google.com/sheets/

我相信应该有一种出口方式。

5 个答案:

答案 0 :(得分:9)

以下网址为您提供了每张Google电子表格的CSV文件。带有链接(未列出)的任何人都必须可以公开访问此表。

您需要提供的参数是:

  • 工作表ID(即Google电子表格https://docs.google.com/spreadsheets/d/{{ID}}/edit的URL中的ID)
  • 工作表名称(即用户指定的工作表名称)
https://docs.google.com/spreadsheets/d/{{ID}}/gviz/tq?tqx=out:csv&sheet={{sheet_name}}

使用该URL,您可以运行GET请求以获取CSV。 或将其粘贴到浏览器地址栏中。

答案 1 :(得分:4)

您今天可以使用Drive API执行此操作 - 请参阅https://developers.google.com/drive/v3/web/manage-downloads#downloading_google_documents,但这会将您限制在文档的第一页。 Sheets API今天没有公开导出为CSV,但可能在将来提供它。

答案 2 :(得分:3)

首先,您应该让任何人都可以访问文档。然后你得到url。从url开始,您应该提取由大小写字母和数字组成的长id。然后使用此脚本。

#!/bin/bash

long_id="id_assigned_to_your_document"
g_id="number_assigned_to_card_in_google_sheet"

wget --output-document=temp.csv "https://docs.google.com/spreadsheets/d/$long_id/export?gid=$g_id&format=csv&id=$long_id"

如果您在文档中只使用一张卡片,则其号码为:g_id="0"

您可能遇到的问题与获取文件中的strange spaces有关。我使用第二个脚本来处理它

#!/bin/bash
#Delete all lines beginning with a # from a file
#http://stackoverflow.com/questions/8206280/delete-all-lines-beginning-with-a-from-a-file
sed '/^#/ d' temp.csv | 
# reomve spaces
# http://stackoverflow.com/questions/9953448/how-to-remove-all-white-spaces-from-a-given-text-file
tr -d "[:blank:]" |
# regexp "1,2" into 1.2
# http://www.funtoo.org/Sed_by_Example,_Part_2
sed 's/\"\([−]\?[0-9]*\),\([0-9]*\)\"/\1.\2/g' > out.csv

更新

正如Sam所说,api是更好的解决方案。现在有很多关于地址的文件:

  

https://developers.google.com/sheets/quickstart/php

使用生成具有CSV结构的输出的示例。

答案 3 :(得分:0)

如果您无法轻松访问或熟悉PHP,那么这是一个非常简单的Google Apps脚本Web应用程序,一旦部署并接受了调用者权限,应该允许具有适当范围的访问令牌或api密钥的客户端导出现有的Google Sheet到csv文件。它将Google表格电子表格ID和表格名称(以及可选的下载文件名)作为查询参数,并返回相应的理论上符合RFC 4180的CSV文件。

有关将Apps脚本项目部署为Web应用程序的更多说明,请访问:https://developers.google.com/apps-script/guides/web#deploying_a_script_as_a_web_app

您只需访问“当前网络应用程序网址”(在您从脚本编辑器中作为网络应用程序发布时提供),并接受同意屏幕,甚至只是访问,您就可以在浏览器中轻松部署并测试它我在示例URL处部署的(配置为作为访问用户执行,以及未经验证/可怕的同意)。

棘手的部分(像往常一样)是设置OAuth令牌或API密钥,但如果您已经调用了Google表格V4 API,那么您可能已经拨入了。我使用CURL来确保它表现为一个REST api,但我用来获取OAuth令牌的技术既有分散注意力又坦率地说有点可怕,因为它很容易搞砸。如果你还没有办法获得一个,那么无论如何,这可能是一个单独的SO问题的好主题。

一个相关的(并且很大!)警告:我不是100%确定同意和验证如何与纯Rest客户端交互(例如,如果你不首先在浏览器中访问它,它是如何工作的......) ,和/或此脚本是否需要与使用Sheets API的其他代码位于同一GCP项目中。如果有兴趣,和/或它不能立即使用,请告诉我,我会很乐意深入挖掘并跟进。

docker-compose logs -f

答案 4 :(得分:0)

还没有人提到gspread,所以这是我的做法:

#open sheet
sheet = gc.open_by_key(sheet_id)

#select worksheet
worksheet = sheet.get_worksheet(0)

#download values into a dataframe
df = pd.DataFrame(worksheet.get_all_records())

#save dataframe as a csv, using the spreadsheet name
filename = sheet.title + '.csv'
df.to_csv(filename, index=False)