如何使用 Python 访问(读、写) GoogleSheets 电子表格?

我想知道你是否能给我一个使用 python 阅读/写入/从 google doc/电子表格的例子。

我在这里看了谷歌文档 API 的 https://developers.google.com/google-apps/spreadsheets/,但不确定我是否点击了正确的链接。举个例子也会很有帮助。

我试图做的是基于不同列的查询电子表格,更像是一个 SQL 查询,然后对数据进行一些下游解析,并将其放入另一个电子表格或 google docs 的文档中。

贝斯特, 阿比

114264 次浏览

我想你正在看 API 文档页面中基于细胞的提要部分。然后,您可以在 Python 脚本中使用 PUT/GET 请求,使用 commands.getstatusoutputsubprocess

看看 GitHub-gpred

我发现它非常容易使用,因为您可以检索整个列

first_col = worksheet.col_values(1)

还有一整排

second_row = worksheet.row_values(2)

你可以或多或少的建立一些基本的选择 ...的地方 ... = ...容易。

我知道这个帖子现在已经过时了,但是这里有一些关于 Google Docs API 的文档。虽然很难找到,但是很有用,所以也许能帮到你。http://pythonhosted.org/gdata/docs/api.html.

我最近在一个项目中使用 gspad 来绘制员工时间数据。我不知道这对你有多大帮助,但是这里有一个代码链接: https://github.com/lightcastle/employee-timecards

格斯普雷德让事情对我来说很简单。我还能够添加逻辑来检查各种条件,以创建月至今和年至今的结果。但我只是导入了整个电子表格,并从那里解析它,所以我不能100% 确定它正是您要找的。祝你好运。

(Jun-Dec 2016) 这里的大多数答案现在已经过时了,因为: 1) GData API是上一代的 Google API,这就是为什么@Josh Brown很难找到旧的 GData Docs API 文档的原因。虽然并非所有的 GData API 都已被弃用,但 All < strong > new Google API确实使用 谷歌数据协议; 2) Google 发布了一个新的 Google Sheets API(而不是 GData)。为了使用新的 API,您需要获得 用于 Python 的 GoogleAPI 客户端库(它与 pip install -U google-api-python-client[或 Python 3的 pip3一样简单)并使用最新的 页面 API v4 + ,它比旧的 API 版本更强大和灵活。

这里有一份官方文件中的 代码示例来帮助你启动。然而,这里有一些更长、更“真实”的例子来说明如何使用你可以从中学到的 API (视频和博客文章) :

最新的 Sheets API 提供了旧版本中没有的功能,即给开发人员编程访问一个 Sheets,就好像你在使用用户界面一样(创建冻结行,执行单元格格式化,调整行/列大小,添加数据透视表,创建图表等) ,但不是像一些数据库,你可以执行搜索并从中获取选定的行。您基本上必须在执行此操作的 API 之上构建一个查询层。一种替代方法是使用支持 类 SQL 查询谷歌图表可视化 API 查询语言。你也可以 从工作表内查询本身。请注意,这个功能在 v4 API 之前就已经存在,而 安全模式在2016年8月更新。要了解更多信息,请从 谷歌开发专家检查 我的 G + 再分享到一个完整的报道

还要注意,Sheets API 主要用于以编程方式访问上述电子表格操作和功能,但要执行 文件级别的 进入,如导入/导出、复制、移动、重命名等,则使用 < strong > Google Drive API 。使用驱动器 API 的例子:

(*)-TL; DR: 将纯文本文件上传到 Drive,导入/转换为 Google Docs 格式,然后将该文件导出为 PDF。上面的帖子使用了 Drive API v2; 这个后续的职位描述了如何将其迁移到 Drive API v3,这里有一个结合了“穷人的转换器”帖子的 开发者视频

要了解更多关于如何在 Python 中使用 Google API 的知识,请查看我正在制作的 我的博客以及各种 Google 开发人员视频(第一组第二组)。

注意。至于 谷歌文档,目前还没有可用的 REST API,所以唯一的方法就是使用 谷歌应用脚本(就像 Node.js 是浏览器之外的 JavaScript 一样,但是这些应用不是在 Node 服务器上运行,而是在 Google 的云中运行; 也可以看看我的 介绍视频)使用应用程序脚本,您可以构建一个 文档应用附加文件(以及其他东西,如表单和表单)。

更新2018年7月 : 以上“ ps”不再是真的了。G Suite 开发团队在 Google Cloud NEXT’18上预先发布了一个新的 Google Docs REST API。对进入新 API 的早期访问程序感兴趣的开发人员应该在 https://developers.google.com/docs注册。

2019年2月更新 : 去年7月推出的预览版 Docs API 现在对所有人开放... 阅读 发射台了解更多细节。

更新2019年11月 : 为了使 G Suite 和 GCP API 更加内联,今年早些时候,所有 G Suite 代码示例都部分集成到 GCP 的较新(低级别而非产品) Python 客户端库中。Auth 的实现方式与此类似,但是(目前)需要更多一点的代码来管理令牌存储,这意味着与我们的库管理 storage.json不同,您将使用 pickle(token.pickle或任何您喜欢的名称)来存储它们,或者选择您自己的持久存储形式。对于这里的读者来说,看看 更新的 Python 快速启动示例

最新的 Googleapi 文档记录了如何使用 python 编写电子表格,但是导航到该表格有点困难。这里是一个链接 如何附加

下面的代码是我第一次成功地尝试附加到谷歌电子表格。

import httplib2
import os


from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools


try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None


# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Sheets API Python Quickstart'




def get_credentials():
"""Gets valid user credentials from storage.


If nothing has been stored, or if the stored credentials are invalid,
the OAuth2 flow is completed to obtain the new credentials.


Returns:
Credentials, the obtained credential.
"""
home_dir = os.path.expanduser('~')
credential_dir = os.path.join(home_dir, '.credentials')
if not os.path.exists(credential_dir):
os.makedirs(credential_dir)
credential_path = os.path.join(credential_dir,
'mail_to_g_app.json')


store = oauth2client.file.Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
if flags:
credentials = tools.run_flow(flow, store, flags)
else: # Needed only for compatibility with Python 2.6
credentials = tools.run(flow, store)
print('Storing credentials to ' + credential_path)
return credentials


def add_todo():
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
'version=v4')
service = discovery.build('sheets', 'v4', http=http,
discoveryServiceUrl=discoveryUrl)


spreadsheetId = 'PUT YOUR SPREADSHEET ID HERE'
rangeName = 'A1:A'


# https://developers.google.com/sheets/guides/values#appending_values
values = {'values':[['Hello Saturn',],]}
result = service.spreadsheets().values().append(
spreadsheetId=spreadsheetId, range=rangeName,
valueInputOption='RAW',
body=values).execute()


if __name__ == '__main__':
add_todo()

看一下 api v4-小床单的 gspan 端口。它应该是非常容易使用,而不是谷歌客户端。

例子

import pygsheets


gc = pygsheets.authorize()


# Open spreadsheet and then workseet
sh = gc.open('my new ssheet')
wks = sh.sheet1


# Update a cell with value (just to let him know values is updated ;) )
wks.update_cell('A1', "Hey yank this numpy array")


# update the sheet with array
wks.update_cells('A2', my_nparray.to_list())


# share the sheet with your friend
sh.share("myFriend@gmail.com")

看看文件 给你

我是作者。

你可以看看 Sheetfu。下面是来自 README 的示例。它提供了一种超级简单的语法来与电子表格进行交互,就好像它是一个数据库表一样。

from sheetfu import Table


spreadsheet = SpreadsheetApp('path/to/secret.json').open_by_id('<insert spreadsheet id here>')
data_range = spreadsheet.get_sheet_by_name('people').get_data_range()


table = Table(data_range, backgrounds=True)


for item in table:
if item.get_field_value('name') == 'foo':
item.set_field_value('surname', 'bar')              # this set the surname field value
age = item.get_field_value('age')
item.set_field_value('age', age + 1)
item.set_field_background('age', '#ff0000')             # this set the field 'age' to red color


# Every set functions are batched for speed performance.
# To send the batch update of every set requests you made,
# you need to commit the table object as follow.
table.commit()

免责声明: 我是这个图书馆的作者。

这根线看起来很旧了。 如果有人还在寻找,这里提到的步骤: https://github.com/burnash/gspread工作得非常好。

import gspread
from oauth2client.service_account import ServiceAccountCredentials
import os


os.chdir(r'your_path')


scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']


creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
gc = gspread.authorize(creds)
wks = gc.open("Trial_Sheet").sheet1
wks.update_acell('H3', "I'm here!")

确保将凭证 json 文件放到工作目录中,并将其重命名为 client _ secret. json。

如果不使用当前凭据启用 GoogleSheetAPI,则可能会遇到错误。