如何将文档还原到以前的版本

时间:2019-09-11 09:47:54

标签: google-apps-script google-drive-api

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

2 个答案:

答案 0 :(得分:3)

  • 您想还原到以前的Google文档版本。
  • 您想使用Google Apps脚本实现这一目标。

如果我的理解正确,那么这个答案如何?

问题和解决方法:

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

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

通过此流程,Google Docs文件将还原为以前的版本。

重要提示:

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

示例脚本:

此替代方法的示例脚本如下。在运行脚本之前,请先please enable Drive API at Advanced Google services

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;
    }
  }
}

注意:

  • 即使将Google Docs文件恢复为以前的版本,也可以更改文件的版本。但是,在测试上述脚本之前,建议您使用示例Google Docs文件。
  • 使用此替代方法时,除Google Docs之外的文件也可以还原为以前的版本。但是在这种情况下,请修改脚本。
  • 如果您想完全还原到以前的版本,在当前阶段,我建议手动还原。
  • 例如,当您只想还原单元格的值时,可以完美实现。您可以在this thread上看到它作为示例案例。

参考:

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

答案 1 :(得分:1)

您可以按照these instructions手动进行操作。另外,如您在revision resource documentation中所见,您可以更改published属性以将特定修订标记为“活动修订”。

要通过Apps脚本执行此操作,您需要进行enable Google Advanced Services,这将允许您完全使用API​​。然后,您可以使用update方法(Documentation here),使用所需修订的ID,并将其published属性更改为true

请记住,根据文档所述:

  

这仅适用于Google文档。