我想知道您是否可以为我提供使用python从Google文档/电子表格中读取/写入的示例。
我确实在这里https://developers.google.com/google-apps/spreadsheets/上查看了google docs API,但不确定是否点击了正确的链接。一个例子也会有很大帮助。
我想做的是根据不同的列查询电子表格,更像是SQL查询,然后对数据进行一些下游解析,然后将其放入Google文档中的另一个电子表格或文档中。
最好-阿比
我想知道您是否可以为我提供使用python从Google文档/电子表格中读取/写入的示例。
我确实在这里https://developers.google.com/google-apps/spreadsheets/上查看了google docs API,但不确定是否点击了正确的链接。一个例子也会有很大帮助。
我想做的是根据不同的列查询电子表格,更像是SQL查询,然后对数据进行一些下游解析,然后将其放入Google文档中的另一个电子表格或文档中。
最好-阿比
Answers:
(2016年6月12日)现在,大多数答案已过期:1)GData API是上一代Google API,因此@Josh Brown很难找到旧的GData Docs API文档。虽然不是所有的GData API与已被否决,所有更新的谷歌的API都没有使用谷歌数据协议; 2)Google发布了新的Google Sheets API(不是GData)。为了使用新的API,您需要获取适用于Python的Google API客户端库(与pip install -U google-api-python-client
[或pip3
适用于Python 3]一样简单),并使用最新的Sheets API v4 +,它比旧版API更强大,更灵活。
这是官方文档中的一个代码示例,可帮助您入门。但是,这里有更长,更真实的使用API的示例,您可以从中学习(视频和博客文章):
最新的Sheets API提供了较旧版本中不可用的功能,即为开发人员提供了对Sheet的编程访问权限,就好像您正在使用用户界面一样(创建冻结的行,执行单元格格式,调整行/列的大小,添加数据透视表,创建图表等) 。),但并不是可以在其中进行搜索并从中获取选定行的数据库。您基本上必须在执行此操作的API之上构建一个查询层。一种替代方法是使用Google Charts Visualization API查询语言,它确实支持类似SQL的查询。您也可以在工作表本身中查询。请注意,此功能在v4 API之前存在,并且安全模型已在2016年8月更新。。要了解更多信息,请查看我的G +转贴到全写了由谷歌开发者专家。
还要注意,Sheets API主要用于如上所述以编程方式访问电子表格的操作和功能,但是要执行文件级访问(例如导入/导出,复制,移动,重命名等),请改用Google Drive API。使用Drive API的示例:
(*)-TL; DR:将纯文本文件上传到云端硬盘,导入/转换为Google文档格式,然后将该文档导出为PDF。以上发布内容使用Drive API v2;此后续帖子介绍了将其迁移到Drive API v3的过程,这是一个结合了“穷人转换者”帖子的开发人员视频。
要了解有关一般如何将Google API与Python结合使用的更多信息,请查看我的博客以及我制作的各种Google开发人员视频(系列1和系列2)。
ps。就Google Docs而言,目前尚没有REST API,因此以编程方式访问Doc的唯一方法是使用Google Apps脚本(像Node.js一样,它是浏览器之外的JavaScript,但不是这些应用程序运行在Node服务器上,则运行在Google的云中;还请查看我的介绍视频。)使用Apps脚本,您可以构建Docs应用程序或Docs附件(以及其他表格和表格)。
2018年7月更新:上面的“ ps”。不再是真的。G Suite开发人员小组在Google Cloud NEXT '18上宣布了新的Google Docs REST API。有兴趣加入新API的早期访问计划的开发人员应在https://developers.google.com/docs上注册。
2019年2月更新:Docs API于去年7月开始预览,现已向所有人开放...更多信息请阅读发布文章。
2019年11月更新:为使G Suite API和GCP API彼此更加内联,今年早些时候,所有G Suite代码示例均已部分与GCP的较新(较低级别而非产品)Python客户端库集成。身份验证的方式类似,但是(当前)需要少量代码来管理令牌存储,这意味着,而不是我们的库来管理storage.json
,您将使用pickle
(token.pickle
或您喜欢的任何名称)存储它们,或者选择自己的形式持久存储。对于在这里的读者,请看一下更新的Python快速入门示例。
我发现它非常易于使用,因为您可以通过以下方式检索整列
first_col = worksheet.col_values(1)
一整排
second_row = worksheet.row_values(2)
你可以或多或少地建立一些基本的选择...
,其中... = ...
容易。
我知道这个线程现在已经很旧了,但是这里有一些关于Google Docs API的不错的文档。很难找到它,但很有用,所以也许会对您有所帮助。http://pythonhosted.org/gdata/docs/api.html。
我最近在一个项目中使用gspread来绘制员工时间数据图。我不知道它对您有什么帮助,但是这里有代码链接:https : //github.com/lightcastle/employee-timecards
Gspread使我的工作变得很轻松。我还能够添加逻辑来检查各种条件,以创建本月迄今和本年迄今的结果。但是我只是导入了整个dang电子表格,然后从那里进行了解析,因此我不确定100%是否正是您要找的东西。祝你好运。
看一下api v4- pygsheets的gspread端口。它应该非常易于使用,而不是使用Google客户端。
样例
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")
在此处查看文档。
在这里写。
最新的Google api文档记录了如何使用python写入电子表格,但导航起来有点困难。这是有关如何追加的示例的链接。
以下代码是我第一次成功附加到Google电子表格的尝试。
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()
您可以看看Sheetfu。以下是自述文件中的示例。它提供了一种超级简单的语法,可以像与数据库表一样与电子表格进行交互。
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。
如果您未使用当前凭据启用Google Sheet API,则可能会遇到错误。