根据另一个电子表格更新电子表格

时间:2019-10-01 19:16:15

标签: javascript google-apps-script google-sheets spreadsheet google-sheets-api

我正在重新整理JS,以为学生和老师建立一个项目。在查看了Apps脚本文档和类似this one之类的问题之后,我坚持制作一个脚本来使两个电子表格相互交谈。响应表将接收带有响应者姓氏和从下拉列表中选择学生的表格(“关联学生”)。名册表在B列中列出了学生。

在收到新的回复(即新的最后一行)后,我想解析名单。如果表单提交中包含了学生的姓名(“答复”表的D列),我想将教师的姓名添加到花名册的D列中。

我目前没有收到错误消息,但是我的测试响应未映射到名册上。所有帮助将得到良好的答复。参见图片以了解床单示例:Cortazar先生提交了一份表格,其中包括名册上的一名学生作为选择;屏幕将根据他提交的表单运行。因此,Cortazar的名字会出现在“成人关系”列下的名册中该学生的旁边。

function getData(){
      var date = new Date();
      var responsesSheet = SpreadsheetApp.openById('XXXXX').getSheetByName('Responses');
      var responsesLastRow = responsesSheet.getLastRow();    

      var teacher = responsesSheet.getRange(responsesLastRow, 3).getValue();

      var connectedStudents = responsesSheet.getRange(responsesLastRow, 4).getValue();

      var rosterSheet = SpreadsheetApp.openById('XXXXX').getSheetByName('roster');
      var rosterLastRow = rosterSheet.getLastRow();
      var rosterArray = rosterSheet.getRange(responsesLastRow, 2).getValues()

      var i;
      for (i = 0; i < responsesLastRow; i++) {
        if (connectedStudents.substr(responsesLastRow, 4) == rosterArray[i]) {
         rosterSheet.getRange((i + 1), 3).setValue(teacher);
        }  
      }
    }

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

  • Responses工作表中检索最后一行的值。
  • roster工作表中检索“ B”列的值。
  • 您希望将Responses工作表最后一行的“ C”列的值放到roster工作表的“ C”列中, roster工作表包含在Responses工作表的“ D”列的值中。

如果我的理解正确,那么这个答案如何?

修改点:

  • 我认为rosterSheet.getRange(responsesLastRow, 2).getValues()rosterSheet.getRange(1, 2, rosterLastRow, 1).getValues()
    • 通过这种方式,可以检索roster工作表的“ B”列的值。
  • 检查Smith, John F.中是否包含Smith, John F., Stephenson, Donald J.时,可以使用indexOf()

修改脚本后,它如下所示。

修改后的脚本:

请按如下所示修改脚本。

从:
var rosterArray = rosterSheet.getRange(responsesLastRow, 2).getValues()
var i;
for (i = 0; i < responsesLastRow; i++) {
  if (connectedStudents.substr(responsesLastRow, 4) == rosterArray[i]) {
   rosterSheet.getRange((i + 1), 3).setValue(teacher);
  }  
}
至:
var rosterArray = rosterSheet.getRange(1, 2, rosterLastRow, 1).getValues();
var i;
for (i = 0; i < rosterLastRow; i++) { // <--- Modified
  if (rosterArray[i][0] && connectedStudents.indexOf(rosterArray[i][0]) > -1) {
    rosterSheet.getRange((i + 1), 3).setValue(teacher);
  }
}

参考文献:

已添加:

  • 如果该值存在,您想将该值添加到roster表的“ C”列中。

关于您的新问题,如果我的理解是正确的,那么以下修改如何?

从:
var rosterArray = rosterSheet.getRange(responsesLastRow, 2).getValues()
var i;
for (i = 0; i < responsesLastRow; i++) {
  if (connectedStudents.substr(responsesLastRow, 4) == rosterArray[i]) {
   rosterSheet.getRange((i + 1), 3).setValue(teacher);
  }  
}
至:
var rosterArray = rosterSheet.getRange(1, 2, rosterLastRow, 2).getValues();
var i;
for (i = 0; i < rosterLastRow; i++) {
  if (rosterArray[i][0] && connectedStudents.indexOf(rosterArray[i][0]) > -1) {
    if (rosterArray[i][1] && rosterArray[i][1].indexOf(teacher) == -1) {
      rosterSheet.getRange((i + 1), 3).setValue(rosterArray[i][1] + "," + teacher);
    } else if (!rosterArray[i][1]) {
      rosterSheet.getRange((i + 1), 3).setValue(teacher);
    }
  }
}
相关问题