Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于其他电子表格更新电子表格_Javascript_Google Apps Script_Google Sheets_Spreadsheet_Google Sheets Api - Fatal编程技术网

Javascript 基于其他电子表格更新电子表格

Javascript 基于其他电子表格更新电子表格,javascript,google-apps-script,google-sheets,spreadsheet,google-sheets-api,Javascript,Google Apps Script,Google Sheets,Spreadsheet,Google Sheets Api,我正在复习我的JS,为我的学生和老师建立一个项目。在查看了应用程序脚本文档和类似的问题之后,我一直在制作一个脚本,以使两个电子表格相互对话。回复表将收到带有回复者姓氏的表格,以及从下拉列表中选择的学生(“关联学生”)。名册在B栏列出了学生 在收到新的响应(即新的最后一行)后,我希望通过花名册进行解析。如果提交的表格中包含了学生的姓名(回答表的D列),我想将教师的姓名添加到花名册表的D列 我目前没有收到错误消息,但我的测试响应没有映射到名册上。所有的帮助都会受到欢迎。如需表格示例,请参见图片:Co

我正在复习我的JS,为我的学生和老师建立一个项目。在查看了应用程序脚本文档和类似的问题之后,我一直在制作一个脚本,以使两个电子表格相互对话。回复表将收到带有回复者姓氏的表格,以及从下拉列表中选择的学生(“关联学生”)。名册在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);
        }  
      }
    }
函数getData(){ 变量日期=新日期(); var responsesheet=SpreadsheetApp.openById('XXXXX').getSheetByName('Responses'); var responsesLastRow=responsesheet.getLastRow(); var teacher=responseSheet.getRange(responseLastRow,3.getValue(); var connectedStudents=responseSheet.getRange(responseLastRow,4.getValue(); var rosterSheet=SpreadsheetApp.openById('XXXXX').getSheetByName('花名册'); var rosterLastRow=rosterSheet.getLastRow(); var rosterArray=rosterSheet.getRange(responsesLastRow,2).getValues() var i; 对于(i=0;i

  • 响应
    工作表中检索最后一行的值
  • 花名册
    工作表中检索列“B”的值
  • 花名册
    工作表的列“B”的值包含在
    响应
    工作表的列“D”的值中时,您希望将
    工作表最后一行的列“C”的值放入
    花名册
    工作表的列“C”中
如果我的理解是正确的,那么这个答案呢

修改点:
  • 我认为
    rosterSheet.getRange(responsesLastRow,2).getValues()
    rosterSheet.getRange(1,2,rosterLastRow,1).getValues()
    • 通过此操作,可以检索
      花名册
      工作表的“B”列的值
  • 当您检查
    Smith,John F.
    是否包含在
    Smith,John F.,Stephenson,Donald J.
    中时,您可以使用
    indexOf()
当您的脚本被修改时,它将变成如下所示

修改脚本: 请按如下方式修改您的脚本

发件人: 致:
var-rosterArray=rosterSheet.getRange(1,2,rosterLastRow,2).getValues();
var i;
对于(i=0;i-1){
if(rosterArray[i][1]&&rosterArray[i][1].indexOf(teacher)=-1){
rosterSheet.getRange((i+1),3).setValue(rosterArray[i][1]+,“+teacher);
}如果(!花名册[i][1]){
getRange((i+1),3),setValue(教师);
}
}
}

我认为您出现问题的原因可能是,尽管
rosterArray
是二维数组,长度为1,但会比较值和数组,for循环从0运行到
responseLastRow
。但从你的问题来看,我无法理解你的处境。因此,为了正确理解您的情况,您能提供一个示例电子表格吗?当然,请删除您的个人信息。通过这一点,我想确认一下。编辑问题以显示表格示例。在本例中,我希望“Cortazar”出现在他在表格回复中选择的所有学生的成人连接栏中。感谢您添加信息。我不得不为我糟糕的英语水平道歉。不幸的是,我无法理解额外的图像,我希望“Cortazar”出现在他在表单回复中选择的所有学生的成人连接栏中。
。你能提供你期望的输入和输出吗?通过这个,我想想想你的处境。@Tanaike我很感激这个问题(你的英语很好!)。我已经更新了问题中的图片和它们的描述,以便更好地说明我的意图。Cortazar在回复中提交了他的姓名和选定的学生。这将触发脚本,更新成人连接栏,在学生旁边显示Cortazar,这是Cortazar表单响应的一部分。感谢您的回复和其他信息。从您的脚本和图像中可以找到
connectedStudents
responsesLastRow
分别是
Smith、John F、Stephenson、Donald J.
和2。而
rosterArray
[[“韦恩斯,布鲁斯”]
。在本例中,
connectedStudents.substr(responsesLastRow,4)
ith,
,此值与
[[“Waynes,Bruce”]]
进行比较。不幸的是,从这种情况来看,我无法理解你的目标。你能解释一下吗?如果我误解了你的处境,请告诉我。对此我深表歉意。谢谢你的洞察力。这会将响应表的C列中的名称添加到花名册表的C列中。然而,目的是将教师的名字添加到提交人回复中出现的名册中的所有人。目前,它只将提交者的名字映射到列表中的名字。@gonzalo2000谢谢您的回复。我注意到一个修改点。所以我修改了它
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);
  }
}
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);
    }
  }
}