Javascript 基于其他电子表格更新电子表格
我正在复习我的JS,为我的学生和老师建立一个项目。在查看了应用程序脚本文档和类似的问题之后,我一直在制作一个脚本,以使两个电子表格相互对话。回复表将收到带有回复者姓氏的表格,以及从下拉列表中选择的学生(“关联学生”)。名册在B栏列出了学生 在收到新的响应(即新的最后一行)后,我希望通过花名册进行解析。如果提交的表格中包含了学生的姓名(回答表的D列),我想将教师的姓名添加到花名册表的D列 我目前没有收到错误消息,但我的测试响应没有映射到名册上。所有的帮助都会受到欢迎。如需表格示例,请参见图片:Cortazar先生提交了一份表格,其中包括名册上的一名学生作为他的选择;他的表格一提交屏幕就会显示出来。因此,Cortazar的名字出现在名册中的学生旁边,该学生是他选择的一部分,在成人关系栏下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
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);
}
}
}