3

我正在尝试使用 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,这应该适用于更改。任何帮助深表感谢。

4

2 回答 2

2

我最近也遇到过这个问题(尝试删除时),但根据此处的文档,似乎不支持批处理insertdelete操作:

多个批处理操作可以组合成一个请求。支持的两种批处理操作是查询和更新。 不支持插入和删除,因为单元格提要不能用于插入或删除单元格。请记住,必须使用工作表提要来执行此操作。

我不确定您的用例,但会使用ListFeed帮助吗?它仍然不会让您批量操作,因此会有相关的延迟,但它可能比您现在(或当时)正在处理的更能容忍。

于 2012-10-04T19:44:10.190 回答
0

从 Google I/O 2016 开始,最新的Google Sheets API支持批量单元更新(和读取)。但是请注意,现在不推荐使用 GData 以及大多数基于GData 的 API,包括上面的示例,因为新 API不是GData。将电子邮件地址和密码以纯文本形式放入代码中也存在安全风险,因此新的(呃)Google API使用OAuth2进行授权。您需要获取最新的适用于 Python 的 Google APIs 客户端库。它就像pip install -U google-api-python-client[或pip3对于 Python 3] 一样简单。

就批量插入而言,这是一个简单的代码示例。假设您在rows. 要将其大量注入工作表中,例如使用文件 ID SHEET_ID& 从 cell 的左上角开始A1,您可以像这样进行一次调用:

SHEETS.spreadsheets().values().update(spreadsheetId=SHEET_ID, range='A1',
        body={'values': rows}, valueInputOption='RAW').execute()

如果您想要一个更长的示例,请查看下面的第一个视频,其中这些行是从关系数据库中读取的。对于此 API 的新手,这里有一个来自官方文档的代码示例,可帮助您入门。有关稍长、更多“真实世界”的示例,请参阅这些视频和博客文章:

最新的 Sheets API 提供了旧版本中不可用的功能,即让开发人员能够以编程方式访问工作表,就好像您在使用用户界面一样(创建冻结行、执行单元格格式设置、调整行/列大小、添加数据透视表、创建图表等)

但是,要对表格执行 文件级访问,例如导入/导出、复制、移动、重命名等,您需要使用Google Drive API。使用 Drive API 的示例:

  • 将 Google 表格导出为 CSV(博文
  • "穷人的纯文本到 PDF" 转换器 (文) (*)

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

于 2017-03-08T00:32:48.637 回答