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

2024-01-03

正如标题所示,我正在尝试找到一种使用 Google Sheets API v4(或 Google Drive API v3)将电子表格恢复到特定版本的方法。

这是需要的,因为单元测试 - 我需要一个测试来在电子表格上执行一些操作(假设删除一行),断言结果,然后将电子表格重置为其初始状态,以便下一个测试可以在原始电子表格上执行。

到目前为止,我注意到 Google Sheets API 中没有执行类似操作的选项。就使用 Google Drive API 而言,我尝试使用修订 https://developers.google.com/drive/api/v3/reference/revisions(获取所有修订的列表并删除所需修订之后的所有修订),但无济于事。

我还尝试在单击后捕获请求恢复此版本按钮,发现有一个revisions/revert端点。

> Example:
> https://docs.google.com/spreadsheets/d/**spreadsheetId**/revisions/revert?includes_info_params=false

我实际上设法以这种方式恢复版本,但是使用 Postman 并使用硬编码值 - 这很糟糕。

关于如何处理这个问题有什么建议吗?


使用 Drive API 从文档恢复旧版本的常用方法是删除所有更高版本修改:删除 https://developers.google.com/drive/api/v3/reference/revisions/delete。但是,正如参考文档所示,“您只能删除 Google 云端硬盘中包含二进制内容的文件(例如图像或视频)的修订版本。其他文件(例如 Google 文档或表格)的修订以及最后剩余的文件版本无法删除因此,没有直接的方法可以使用 Drive API 恢复到以前的版本(Sheets API 对此没有用)。

解决方法:

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

  • 获取您想要恢复的修订 ID修订.列表 https://developers.google.com/drive/api/v3/reference/revisions/list.
  • 导出您要恢复的版本修订版.get https://developers.google.com/drive/api/v3/reference/revisions/get and exportLinks,的一个属性修订资源 https://developers.google.com/drive/api/v3/reference/revisions#resource-representations。您必须选择导出此版本的 MIME 类型(请参阅支持的导出 MIME 类型列表 https://developers.google.com/drive/api/v3/ref-export-formats). 更新:您必须通过设置参数来指定要检索字段exportLinksfields to exportLinks.
  • 获取此导出版本的 blob。
  • 使用此 blob,更新电子表格文件更新 https://developers.google.com/drive/api/v3/reference/files/update.

您可以在 Google Apps 脚本中查看执行此操作的代码:这个答案 https://stackoverflow.com/a/57898660/10612011。您必须直接使用 API 并将其改编为 C#,但工作流程基本相同。

参考:

  • 修改:删除 https://developers.google.com/drive/api/v3/reference/revisions/delete
  • 修订资源 https://developers.google.com/drive/api/v3/reference/revisions#resource-representations
  • G Suite 文档和相应的导出 MIME 类型 https://developers.google.com/drive/api/v3/ref-export-formats
  • 文件更新 https://developers.google.com/drive/api/v3/reference/files/update
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Google API 恢复电子表格的特定版本 的相关文章

  • 数字或货币的字符串格式?

    我需要为每个千给出逗号 所以我用了DataFormatString 0 它运行良好 但当值为0 它正在显示 00 我只想只显示 0 我们怎样才能做到这一点 DataFormatString 0 C0 这将格式化为小数点后 0 位的货币 Da
  • WebBrowser Control 导致整个应用程序变得无响应

    我有一个带有嵌入式 Web 浏览器的 C NET 3 5 应用程序 浏览器被设计为指向远程站点 而不是本地站点 一切工作正常 但是当页面响应缓慢时 这会导致我的整个应用程序变得无响应 直到加载页面 我不介意浏览器在执行任务时没有响应 但应用
  • 什么是具有副作用的表达式?为什么不应将它们传递给宏?

    我在 C 如何编程 一书中看到这样一句话 具有副作用 即变量值被修改 的表达式不应传递给宏 因为宏参数可能会被多次求值 我的问题是什么是具有副作用的表达式以及为什么不应将它们传递给宏 经典的例子是计算两个值的最大值的宏 define MAX
  • 为什么这些冲突出现在以下 XML 的 yacc 语法中

    我有以下 XML 语法 效果很好 program lt ID attribute list gt root root lt ID attribute list gt node list lt ID gt node list node s n
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 是否有任何现成的组件可用于计算对象上的表达式?

    我们想要解析以下类型的表达式 Func
  • 计算序列而无法存储值?

    问题陈述 here http www spoj com problems EC SER 令 S 为无限整数序列 S0 a S1 b Si Si 2 Si 1 对于所有 i gt 2 你有两个整数 a 和 b 您必须回答有关序列中第 n 个元
  • 无法通过 java api 将嵌入 HTML 的本地图像文件作为数据 URI 上传到 google doc

    我需要从本地磁盘上传图像文件 我将图像转换为base64格式 并将html文件也写入本地磁盘 该html文件可以在浏览器中打开并显示图像 但google doc中的文档只是一个空文件 即使我将该html文件拖到google中文档图像仍然不存
  • Visual Studio:同时调试多个项目?

    是否可以在 Visual Studio 中同时调试多个项目 我知道您可以从解决方案属性中选择多个启动项目 但是断点是如何处理的 如果两个项目使用同一个类 它的两个不同实例 并且我因其中的断点而停止 那么它只会阻止一个程序还是同时阻止两个程序
  • DirectX Vertex 中的 THE 是什么

    我知道 RHW 是倒数同质 W 但有人可以解释一下它的使用方法和作用吗 gamedev论坛上的说明post http www gamedev net topic 440283 reciprocal of homogeneous w and
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • 在 C99 中,f()+g() 是未定义还是只是未指定?

    我曾经认为在C99中 即使函数的副作用f and g干扰 虽然表达f g 不包含序列点 f and g将包含一些 因此行为将是未指定的 要么 f 在 g 之前调用 要么 g 在 f 之前调用 我不再那么确定了 如果编译器内联函数会怎样 即使
  • 将 boost::iostreams::mapped_file_source 与 std::multimap 一起使用

    我有相当大量的数据需要分析 每个文件大约有 5gig 每个文件的格式如下 xxxxx yyyyy 键和值都可以重复 但键是按升序排列的 我正在尝试使用内存映射文件来实现此目的 然后找到所需的键并使用它们 这是我写的 if data file
  • 确定所选电子邮件是来自收件箱还是已发送邮件

    我正在编程Outlook 插件并需要确定所选电子邮件是否来自Inbox or Sent Items这样当我将电子邮件保存到数据库中时 我可以使用文件夹 收件箱 或 已发送 来标记电子邮件 我知道我可以将文件夹名称与 收件箱 或 已发送邮件
  • 将图像添加到 ASP.Net 中的单选按钮列表

    我正在尝试将图像添加到单选按钮列表控件 但它不起作用 我试过这个 RadioButtonList2 Items Add new ListItem String Format src Colors Dallas 625527 1 1 png
  • if(pointerVar) 与 if(pointerVar!=NULL) 相同吗?

    简单的问题 Is if pointerVar 与if pointerVar NULL 也是if pointerVar 与if pointerVar NULL 给我你在技术上最正确 迂腐的答案 这两种说法看起来和操作起来都是一样的 前者有什么
  • MonoMac 窗口关闭时没有错误

    我刚刚开始在 Xamarin Studio 中使用 MonoMac 并且遇到了最奇怪的问题 我有一个带有 NSButton 和 NSTextField 的窗口 至此 我已经删除了按钮上的事件处理程序 因此它不会执行任何操作 除了在单击它时突
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • Linq 表达式树 Any() 问题

    您好 我在使用 Any 扩展方法的表达式树时遇到问题 这是我的代码 IQueryable
  • 隐藏 MediaPlayer 控件(Microsoft 媒体平台播放器框架)

    我在 c xaml 应用程序中使用 MMP PF 提供我自己的控制元素来处理播放器 这就是为什么我想隐藏 禁用出现在底部的本机控件 在屏幕截图的屏幕中间 这只是使用了一个主题 有人知道该怎么做吗 我没能找到合适的房产 像这样使用 axWin

随机推荐