【问题标题】:GoogleJsonResponseException: The call from API to drive.revisions.get failed with error : Revision not found: 1GoogleJsonResponseException:从 API 调用 drive.revisions.get 失败并出现错误:未找到修订:1
【发布时间】:2022-01-13 19:34:12
【问题描述】:

以下代码用于在执行分析脚本后重新初始化文件。目标是清除已为新请求手动填写的单元格。

错误是在分析过程结束时得到的,我无法追查问题的根源。

    // Before you run the script, please enable Drive API at Advanced Google services.
function resetFile() {//restore previous version of the file
  var revisionId = "1";  // Please set the revision ID you want to revert.
  var googleDocsFileId = SpreadsheetApp.getActiveSpreadsheet().getId();  // 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;
    }
  }
}

function resetSource(){//pas nécessaire
   var file= SpreadsheetApp.getActiveSpreadsheet().getRangeByName("FileID").getValue(); 
   var fileID = DriveApp.getFileById(file);  
  fileID.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.EDIT);
}

2022 年 1 月 14 日更新

【问题讨论】:

  • 代码本身不足以让我们复制您的问题。请提供示例文件和屏幕截图。另外,你能展示一下分析过程是什么吗?见minimal reproducible example
  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法理解你的问题。我可以问你目标的细节吗?如果可以的话,请将示例输入和输出情况显示为图片?
  • 我的脚本createfile.gs 帮助我创建了一个文件。在执行结束时,它调用resetFile.gs 以恢复到表的先前版本(干净版本)。如您所见,resetFile 进程卡在第 6 行,因为var revisionId 有问题。您对此错误有任何想法吗?
  • 感谢您的回复。首先,从您的演示脚本来看,如果您在stackoverflow.com/a/57898660 使用我的示例脚本,我深表歉意,我的示例脚本不能直接用于您的情况。从您的回复中,我提出了一个修改点作为答案。你能确认一下吗?如果这不是您问题的直接解决方案,我再次道歉。

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


【解决方案1】:

根据您的错误消息,在您的情况下,如何检索第一个现有修订版本?当这反映在您的脚本中时,它变为如下。

发件人:

var revisionId = "1";
var googleDocsFileId = SpreadsheetApp.getActiveSpreadsheet().getId();

收件人:

var googleDocsFileId = SpreadsheetApp.getActiveSpreadsheet().getId();
var list = Drive.Revisions.list(googleDocsFileId, { fields: "items(id)" }).items;
if (list.length == 0) throw new Error("No revisions were found.");
var revisionId = list[0].id;

参考:

【讨论】:

  • 嗨田池,你是冠军!不过,我保留了googleDocsFileId var。 var googleDocsFileId = SpreadsheetApp.getActiveSpreadsheet().getId(); var list = Drive.Revisions.list(googleDocsFileId, { fields: "items(id)" }).items; if (list.length == 0) throw new Error("No revisions were found."); var revisionId = list[0].id; 非常感谢!
  • @Mous 感谢您的回复。的!是的!需要var googleDocsFileId = SpreadsheetApp.getActiveSpreadsheet().getId() 才能使用Drive.Revisions.list。我也更新了我的答案。我很高兴你的问题得到了解决。也谢谢你。
【解决方案2】:

// 在运行脚本之前,请在 Google 高级服务中启用 Drive API。

function resetFile() {
    //restore previous version of the file var revisionId = "1"; // Please set the revision ID you want to revert. 
    var googleDocsFileId = SpreadsheetApp.getActiveSpreadsheet().getId();

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

function resetSource() {
    //pas nécessaire 
    var file = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("FileID").getValue(); 
    var fileID = DriveApp.getFileById(file); 
    fileID.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.EDIT);
}

【讨论】:

  • 如果不尝试换行、缩进或格式化,这真的很难理解。请edit您的答案以提高可读性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2022-10-17
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多