如何将文档恢复到以前的修订版

Wil*_*emS 2 google-apps-script google-drive-api

我想将 GAS 中的 Google 文档(或任何其他文档)恢复到较早的版本。我设法访问了修订,甚至下载了较旧的修订,但如何将文档恢复到指定的修订?

Tan*_*ike 7

  • 您想恢复到以前版本的 Google 文档。
  • 您想使用 Google Apps 脚本来实现这一点。

如果我的理解是正确的,这个答案怎么样?

问题和解决方法:

不幸的是,在现阶段,Google Docs 的修订版本不能通过带有脚本的 API 直接更改。因此,作为几种解决方法之一,我建议使用导出的数据覆盖 Google Docs 文件。此变通方法的流程如下。

  1. 使用修订 ID 从 Google Docs 文件中检索导出的端点。
    • 在这种情况下,Google Docs 文件将导出为 Microsoft Docs 文件。
  2. 从导出的端点检索 blob。
  3. 用检索到的 blob 覆盖 Google 文档。

通过此流程,Google Docs 文件将恢复到以前的版本。

重要的:

重要的一点是,当 Google Docs 文件导出为 Microsoft Docs 文件时,在大多数情况下,覆盖的 Google Docs 文件不会从该版本的原始 Google Docs 更改。但我不确定这种解决方法是否适用于所有情况。所以请注意这一点。

示例脚本:

此变通方法的示例脚本如下。在运行脚本之前,请在高级 Google 服务中启用 Drive API

function myFunction() {
  var revisionId = "1";  // Please set the revision ID you want to revert.
  var googleDocsFileId = "###";  // Please set the Google Docs file ID.

  var endpoints = Drive.Revisions.get(googleDocsFileId, revisionId).exportLinks;
  var keys = Object.keys(endpoints);
  for (var i = 0; i < keys.length; i++) {
    if (keys[i].indexOf("application/vnd.openxmlformats-officedocument") > -1) {
      var endpoint = endpoints[keys[i]] + "&access_token=" + ScriptApp.getOAuthToken();
      var mediaData = UrlFetchApp.fetch(endpoint).getBlob();
      Logger.log(mediaData.getBytes().length)
      Drive.Files.update({}, googleDocsFileId, mediaData);
      break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 即使在 Google Docs 文件恢复到以前的版本之后,文件的版本也可以更改。但在测试上述脚本之前,我建议使用示例 Google Docs 文件。
  • 使用此解决方法时,除 Google Docs 之外的文件也可以恢复到以前的版本。但在这种情况下,请修改脚本。
  • 如果你想完美还原到之前的版本,在现阶段,我建议手动还原。
  • 例如,当您只想还原单元格的值时,这可以完美实现。您可以在此线程中将其视为示例案例。

参考:

如果这不是您想要的方向,我深表歉意。

更新时间:2020 年 2 月 7 日

从 2020 年 1 月起,访问令牌不能与查询参数一起使用,如access_token=###Ref所以请使用访问令牌到请求头而不是查询参数。如下。

var res = UrlFetchApp.fetch(url, {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}});
Run Code Online (Sandbox Code Playgroud)

  • 确实非常感谢。我很荣幸阅读您的开箱即用解决方案。当我开始思考这一点时:奇怪的是,要完成我需要的任务(将文档恢复到以前的版本),我最好根本不使用 Google 文档。一个更简单的解决方法是在 Drive 中使用 Microsoft Word 文档,现在可以轻松查看和编辑该文档(并恢复到以前的版本)。看来这是谷歌不应该忽视的一个挑战...... (2认同)