【问题标题】:For loop to check values from two spreadsheetsFor循环检查两个电子表格中的值
【发布时间】:2020-01-30 23:23:55
【问题描述】:

我有两个电子表格:

  • 工作表 6th 和 7thRoster 的 A 列列出了样本中的所有 ID,包含 853 项。
  • 已提交工作表上的 C 列包含已完成任务的用户的 ID。包含 632 项。

我正在尝试解析这两列。如果来自工作表 6th&7thRoster 的 A 列的用户与工作表 sandboxAlreadySubmitted 的 C 列的用户匹配,我想在工作表 6th&7thRoster 的当前行的 I 列上写“是”字样。使用下面的代码时,我没有看到在 6th&7thRoster 的 I 列中没有看到任何“Yes”一词的实例,尽管我知道有多个地方应该是这种情况。

function checkRoster() {
  var mainSheet = SpreadsheetApp.openById('XXXXXXX');
  var roster = mainSheet.getSheetByName('6th&7thRoster');
  var submissions = mainSheet.getSheetByName('alreadySubmitted');

  var rosterLastRow = roster.getLastRow();
  var submissionsLastRow = submissions.getLastRow();

  var rosterArray = roster.getRange('A2:A853').getValues();
  var submissionsArray = submissions.getRange('C2:C632').getValues;

  var i;
  var x;
  for (i = 1; i < 853; i++) {
    for (x = 1; x < 632; x++){
      if (rosterArray[i] == submissionsArray[x]){
        roster.getRange(i, 9).setValue("Yes");
      }
    } 
  }
}

我们将不胜感激有关如何解决和完成此任务的反馈。为保密起见,我不能分享原始表格。

【问题讨论】:

    标签: for-loop google-apps-script google-sheets spreadsheet


    【解决方案1】:
    • 您希望将A2:A853 的值与6th&amp;7thRoster 的值和C2:C632alreadySubmitted 的值进行比较。
    • alreadySubmittedC2:C632的值与6th&amp;7thRosterA2:A853的值相同时,你想把Yes放到“I”列。

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

    修改脚本:

    function checkRoster() {
      var mainSheet = SpreadsheetApp.openById('XXXXXXX');
      var roster = mainSheet.getSheetByName('6th&7thRoster');
      var submissions = mainSheet.getSheetByName('alreadySubmitted');
    
      var rosterLastRow = roster.getLastRow();
      var submissionsLastRow = submissions.getLastRow();
    
      var rosterArray = roster.getRange('A2:A853').getValues();
      var submissionsArray = submissions.getRange('C2:C632').getValues(); // Modified
    
      // I modified below script.
      var obj = submissionsArray.reduce(function(o, [v]) {
        if (v) o[v] = true;
        return o;
      }, {});
      var values = rosterArray.map(function([v]) {return [obj[v] ? "Yes" : ""]});
      roster.getRange(2, 9, values.length, values[0].length).setValues(values);
    }
    

    流程:

    1. A2:A8536th&amp;7thRosterC2:C632alreadySubmitted 检索值。
    2. 创建一个对象,用于从alreadySubmitted 的值中搜索值。
    3. 创建用于放入6th&amp;7thRoster 的行值。

    参考资料:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2022-12-16
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多