使用Google API恢复特定版本的电子表格

4
就像标题所说,我试图通过使用Google Sheets API v4(或Google Drive API v3)找到一种恢复电子表格到特定版本的方法。
这是因为单元测试 - 我需要一个测试来执行一些操作(比如删除一行)在电子表格上,断言结果,然后将电子表格重置为其初始状态,以便下一个测试可以在原始电子表格上执行。
到目前为止,我注意到Google Sheets API中没有类似的选项。至于使用Google Drive API,我尝试使用revisions(获取所有修订版本的列表并删除所需版本之后的所有修订版本),但没有成功。
我还尝试捕获点击“恢复此版本”按钮后的请求,并发现有一个revisions/revert端点。
> Example:
> https://docs.google.com/spreadsheets/d/**spreadsheetId**/revisions/revert?includes_info_params=false

我实际上通过这种方式成功地还原了版本,但是使用了Postman并使用硬编码的值 - 这是不好的。
你有什么建议如何解决这个问题吗?
1个回答

5

使用Drive API恢复旧版本的常规方法是通过使用修订版:删除删除所有后续版本。但正如所引用的文档所指出的那样,"您只能删除Google Drive中具有二进制内容(如图像或视频)的文件的修订版。无法删除其他文件(例如Google文档或表格)的修订版和最后剩余的文件版本"。因此,没有直接使用Drive API还原到以前的版本的方法(Sheets API对此没有用处)。

解决方法:

一个可能的解决方法是执行以下操作:

  • 通过Revisions.list获取您想要恢复的修订版ID。
  • 通过Revisions.getRevisions资源exportLinks属性,导出您想要恢复的版本。您将需要选择以哪种MIME类型导出此版本(请参见支持的导出MIME类型列表)。更新:您必须指定要检索exportLinks字段,方法是将参数fields设置为exportLinks
  • 获取此导出版本的blob。
  • 使用此blob,通过Files.update更新电子表格。
你可以在这个答案中看到如何使用Google Apps Script来完成此操作。你需要直接使用API并将其适应于C#,但是工作流程基本相同。
参考资料:

不幸的是,当获取修订版本时,我得到了一个空的“exportLinks”字段。还使用了Google的Try this API功能进行了检查,因此没有与权限相关的问题。JSON响应:{ "kind": "drive#revision", "id": "156", "mimeType": "application/vnd.google-apps.spreadsheet", "modifiedTime": "2020-02-11T10:39:59.056Z" } - Dinac23
2
@Dinac23 在调用 Revisions.get 时,您必须指定要检索字段 exportLinks,并将参数 fields 设置为 exportLinks。否则,您将获得默认字段,其中不包括 exportLinks - Iamblichus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接