【问题标题】:Use =UNIQUE from another spreadsheet in WorkBook - Google Apps Script使用 WorkBook 中另一个电子表格中的 =UNIQUE - Google Apps 脚本
【发布时间】:2020-01-28 03:46:18
【问题描述】:

我正在尝试使用函数 (=UNIQUE ? ) 在另一个工作表中返回一个范围内的名称列表以及该范围内有多少个名称。我知道这个函数会这样做 - 如果数据在 SAME 工作表中。

这是电子表格示例的链接,您可以了解我的意思 https://docs.google.com/spreadsheets/d/1Fro28JD-a-ZVcWIGkzCqgNM_QEljm64FPRIVztvJTmM/edit#gid=0

我试过查询然后importrange唯一但不好

提前致谢

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:
    • 您希望检索共享电子表格中CURRENT PALLETS AWAITING PROCESSING 工作表中单元格“A2:A”中值的频率。
      • 例如,在值Pacific Magazines - Nov 2019 Donation 的情况下,您希望将Pacific Magazines - Nov 2019 Donation 放入另一个电子表格的“A”列,将45 的频率放入另一个电子表格的“B”列。
    • 您希望使用 Google Apps 脚本实现此目的。

    如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

    流程:

    此示例脚本的流程如下。

    1. 从工作表中检索值。
    2. 计算频率。
      • 创建一个对象并将其转换为一个数组。在这种情况下,数组已排序。
    3. 输入值。

    示例脚本:

    在此脚本中,结果值被放入destinationSpreadsheetId 电子表格中的destinationSheetName 工作表中。在运行脚本之前,请设置这些变量。

    function myFunction() {
      var destinationSpreadsheetId = "###";  // Please set the destination Spreadsheet ID.
      var destinationSheetName = "Sheet1";  // Please set the destination sheet name of the Spreadsheet.
    
      var destinationSS = SpreadsheetApp.openById(destinationSpreadsheetId)
      var destinationSheet = destinationSS.getSheetByName(destinationSheetName);
      var sourceSS = SpreadsheetApp.getActiveSpreadsheet();
      var sourceSheet = sourceSS.getSheetByName("CURRENT PALLETS AWAITING PROCESSING");
    
      // Retrieve the values from the sheet.
      var values = sourceSheet.getRange(2, 1, sourceSheet.getLastRow() - 1, 1).getValues();
    
      // Calculate the frequency.
      var obj = values.reduce(function(o, [a]) {
        // o[a] = a in o ? o[a] + 1 : 1;
        if (a) o[a] = a in o ? o[a] + 1 : 1;  // Modified
        return o;
      }, {});
      var ar = Object.keys(obj).map(function(e) {return [e, obj[e]]});
    
      // Put the values.
      destinationSheet.getRange(destinationSheet.getLastRow() + 1, 1, ar.length, ar[0].length).setValues(ar);
    }
    
    • 如果要对结果数组进行排序,请将ar.sort(function(a, b) {return(b[1] - a[1])})放在var ar = Object.keys(obj).map(function(e) {return [e, obj[e]]});之后。

    参考资料:

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

    【讨论】:

    • Tanaike - 您已经正确回答了我的问题,并且代码按预期工作。我希望有一天能够知道如何编写这样的代码。非常感谢。汤姆
    • Tanaike - 代码确实返回了一个我不需要的 TOTAL。你能告诉我我需要改变什么来删除它吗?谢谢
    • @Tom Sawkins 感谢您的回复。关于你的附加问题,我不得不为我糟糕的英语水平道歉。 TOTAL 是什么?不幸的是,我无法理解您的附加问题。例如,为了正确理解您的问题,您能否更新共享电子表格,包括结果值和复制问题的脚本?我想确认一下。
    • Tanaike - 请参阅链接docs.google.com/spreadsheets/d/…
    • 也很高兴
    【解决方案2】:

    试试这个:

    =unique(filter(importrange("URL", "sheetName!cellRange"),importrange("URL","sheetName!cellRange") = "conditionToBeMet"))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      相关资源
      最近更新 更多