我正在尝试使用python-gdata填充电子表格中的工作表。问题是,更新单个细胞的速度非常慢。 (通过一次执行一个,每个请求大约需要500毫秒!)因此,我正在尝试使用内置于gdata中的批处理机制来加快速度。
问题是,我似乎无法插入新细胞。我在网上搜索了一些例子,但我找不到任何东西。这是我的代码,我从文档中的示例改编而来。 (文档实际上没有说明如何插入单元格,但它确实显示了如何更新单元格。由于这是一个新的工作表,它没有单元格。)
此外,启用调试后,我可以看到我的请求返回HTTP 200 OK。
import time
import gdata.spreadsheet
import gdata.spreadsheet.service
import gdata.spreadsheets.data
email = '<snip>'
password = '<snip>'
spreadsheet_key = '<snip>'
worksheet_id = 'od6'
spr_client = gdata.spreadsheet.service.SpreadsheetsService()
spr_client.email = email
spr_client.password = password
spr_client.source = 'Example Spreadsheet Writing Application'
spr_client.ProgrammaticLogin()
# create a cells feed and batch request
cells = spr_client.GetCellsFeed(spreadsheet_key, worksheet_id)
batchRequest = gdata.spreadsheet.SpreadsheetsCellsFeed()
# create a cell entry
cell_entry = gdata.spreadsheet.SpreadsheetsCell()
cell_entry.cell = gdata.spreadsheet.Cell(inputValue="foo", text="bar", row='1', col='1')
# add the cell entry to the batch request
batchRequest.AddInsert(cell_entry)
# submit the batch request
updated = spr_client.ExecuteBatch(batchRequest, cells.GetBatchLink().href)
我的预感是,我只是误解了API,并且这应该适用于更改。非常感谢任何帮助。
答案 0 :(得分:2)
我最近也遇到过这种情况(尝试删除时),但根据文档here,似乎不支持批量insert
或delete
操作:
许多批处理操作可以合并为一个请求。 支持的两种批处理操作是查询和更新。 不支持插入和删除,因为不能使用单元格Feed 用于插入或删除单元格。请记住工作表提要必须 习惯这样做。
我不确定您的用例,但会使用ListFeed
帮助吗?它仍然不会让你批量操作,所以会有相关的延迟,但它可能比你现在处理的(或当时)更容忍。
答案 1 :(得分:0)
As of Google I/O 2016,最新的Google Sheets API支持批量单元格更新(和读取)。但请注意,GData现已弃用,大多数GData-based APIs已被弃用,包括上面的示例,因为新API 不是 GData。将电子邮件地址和密码以明文形式放入代码中也存在安全风险,因此new(er) Google APIs使用OAuth2进行授权。您需要获取最新的Google APIs Client Library for Python。它就像{3}的[{1}} [或pip install -U google-api-python-client
一样简单。“
就批量插入而言,这是一个简单的代码示例。假设您在pip3
中有多行数据。要将其大量注入工作表,请使用文件ID rows
&amp;从单元格SHEET_ID
的左上角开始,您可以进行如下调用:
A1
如果您需要更长的示例,请参阅下面的第一个视频,其中从关系数据库中读取这些行。对于那些刚接触这个API的人来说,这里有来自官方文档的one code sample来帮助你开始。对于稍微长一点的“真实世界”示例,请参阅这些视频&amp;博客文章:
最新的Sheets API提供旧版本中未提供的功能,即为开发人员提供编程的文档 - 对Sheet的访问,就像使用用户界面一样(创建冻结的行,执行单元格格式化,调整行/列的大小,添加数据透视表,创建图表等。)
但是,要在表单上执行文件级别访问,例如导入/导出,复制,移动,重命名等,您可以使用Google Drive API。使用Drive API的示例:
(*) - TL; DR:将纯文本文件上传到云端硬盘,导入/转换为Google文档格式,然后将该文档导出为PDF格式。上面的帖子使用Drive API v2; this follow-up post描述了将其迁移到Drive API v3,这里有一个developer video结合了“穷人的转换器”帖子。