使用for循环将数据从一个Google表格映射到另一个Google表格

时间:2019-12-20 02:25:45

标签: javascript for-loop google-apps-script google-sheets mapping

我对Google脚本还很陌生。我有一个学生名单Google表格,其中包含人口统计信息,包括ID号。我还有一个响应表,该表自动收集B列上的电子邮件地址(电子邮件地址由ID号加上“ @ foo.org”创建)。我试图让我的脚本通过自动收集的电子邮件进行解析,将电子邮件的ID部分映射到C列上。然后,我使用for循环来检查提取的ID编号是否与我的主要花名册相对应,并映射其余信息在答案表上针对同一学生。

到目前为止,我只能正确映射响应表中的第一行;从第二行开始,我仅看到数字ID,但未映射其他相关列。这是我目前拥有的:

function extractId() {
  var responsesSheet = SpreadsheetApp.openById('XXXXXXX').getSheetByName('Sheet1');
  var rosterSheet = SpreadsheetApp.openById('XXXXXXX').getSheetByName('Sheet1');

  var responsesHighestEntry = responsesSheet.getLastRow();

  var email;
  var idNumber;

  var rosterLastRow = rosterSheet.getLastRow();
  var rosterArray = rosterSheet.getRange(2, 1, (rosterLastRow - 1)).getValues();
  var studentResponsesRow;

  var i;
  var x;
  var y = 2;
  var fullName;
  var grade;
  var advisoryTeacher;
  var advisoryRoom;


  for (i = 2; i < responsesHighestEntry; i++) {
    email = responsesSheet.getRange(i, 2).getValue();
    idNumber = email.replace(/\@(.*)/i,"");
    responsesSheet.getRange(i, 3).setValue(idNumber);

    for (x = 0; x < rosterLastRow; x++) { 
      if (rosterArray[x] == idNumber) {
        studentResponsesRow = y;

        fullName = rosterSheet.getRange(y, 2).getValue(); 
        responsesSheet.getRange(y, 4).setValue(fullName);

        grade = rosterSheet.getRange(x + 2, 6).getValue(); 
        responsesSheet.getRange(studentResponsesRow, 5).setValue(grade);

        advisoryTeacher = rosterSheet.getRange(x + 2, 7).getValue(); 
        responsesSheet.getRange(studentResponsesRow, 6).setValue(advisoryTeacher);

        advisoryRoom = rosterSheet.getRange(x + 2, 8).getValue(); 
        responsesSheet.getRange(studentResponsesRow, 7).setValue(advisoryRoom);
      } 

      y++;

    }
  }
}

Sample roster带有人口统计数据的名册表样本。

Sample end-result responses sheet样本最终结果响应表。在这种情况下,将自动收集电子邮件地址。 C-G列将是运行脚本的结果。

1 个答案:

答案 0 :(得分:2)

  • 您要从问题图像中“花名册”的值获得“样本最终结果响应表”。
    • 根据您的情况,“响应表”只有“ B”列,其中包含电子邮件地址。
    • 您要输入电子邮件地址ID与“花名册”中的“ A”列相同的值。
  • 您想使用Google Apps脚本实现这一目标。

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

此修改后的脚本的流程如下。

  1. 从“响应表”中检索“ B”列的值。
  2. 从“名册表”中检索值。
  3. 创建一个用于搜索ID的对象。
  4. 将结果值创建为数组。
  5. 将值放入“响应表”。

修改后的脚本:

<OutputType>

参考: