【问题标题】:How to get older versions of Google Spreadsheet data?如何获取旧版本的 Google 电子表格数据?
【发布时间】:2019-08-07 04:47:23
【问题描述】:

我正在尝试比较不同版本的电子表格数据并突出显示两个版本之间的差异。我知道有版本历史功能,但我正在尝试在选择版本时获取所有修订历史记录。(即,如果最新版本是五个并且我选择两个,我想获得在版本二之间进行的所有修订和五个)。

我知道如何访问当前版本,但我不知道如何使用旧版本执行此操作。有没有办法像下面的代码一样访问旧版本?

var spreadsheet = SpreadsheetApp.openById(id);
var sheet = spreadsheet.getSheets()[0];
var sheetdata = sheet.getDataRange().getValues();

【问题讨论】:

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


    【解决方案1】:
    • 您想使用以下脚本从其他版本的电子表格中检索值。

      var spreadsheet = SpreadsheetApp.openById(id);
      var sheet = spreadsheet.getSheets()[0];
      var sheetdata = sheet.getDataRange().getValues();
      
    • 您已经获得电子表格的修订 ID。

    • 您希望使用 Google Apps 脚本实现此目的。

    如果我的理解是正确的,那么这个答案呢?当仅从其他版本的电子表格中检索值时,此解决方法如何?不幸的是,某些修订版的电子表格无法直接检索为电子表格。因此,在此解决方法中,它被转换为其他格式并检索值。请认为这只是几个答案之一。

    流程:

    此变通方法的流程如下。

    1. 以 excel 格式检索其他版本的电子表格。
    2. 将 excel 格式转换为 Google 电子表格。
      • 通过这种方式,值被分隔到每张纸上。
    3. 使用您的脚本检索值。

    示例脚本:

    在运行此脚本之前,请在 Advanced Google services 启用 Drive API。并设置spreadsheetIdrevisionId的变量。

    function myFunction() {
      var spreadsheetId = "###"; // Please set the Spreadsheet ID.
      var revisionId = "###"; // Please set the revision ID.
    
      var url = "https://docs.google.com/spreadsheets/export?id=" + spreadsheetId + "&revision=" + revisionId + "&exportFormat=xlsx";
      var blob = UrlFetchApp.fetch(url, {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}}).getBlob();
      var id = Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS, title: revisionId}, blob).id;
    
    
      var spreadsheet = SpreadsheetApp.openById(id);
      var sheet = spreadsheet.getSheets()[0];
      var sheetdata = sheet.getDataRange().getValues();
    }
    

    注意:

    • 在此示例脚本中,会在根文件夹中创建版本的电子表格。
      • 文件名是修订 ID。
    • 当您要检索电子表格的修订 ID 时,请使用修订:列表。

    参考资料:

    如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

    【讨论】:

    • 使用Drive.Revisions.get提供的downloadUrl会更好吗(例如,该url返回什么类型的文件;与上面的UrlFetchApp有什么不同)?
    • @Tanaike 这正是我想要的。非常感谢!
    • @sinaraheneba 谢谢你的建议。我出于以下原因提出了上述方法。 Drive.Revisions.get 获取的文件的导出端点与上述方法相同。两者都需要文件 ID 和修订 ID。针对这种情况,我提出了上述工艺成本较低的方法。如果我误解了您的建议,请告诉我。
    • @m3-bit 感谢您的回复。很高兴您的问题得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多