javascript - 根据另一个电子表格更新电子表格
问题描述
我正在复习我的 JS,以便为我的学生和老师构建一个项目。在查看了 Apps Script 文档和类似这样的问题之后,我被困在制作一个脚本以使两个电子表格相互通信。响应表将收到包含响应者姓氏和从下拉列表中选择的学生(“连接的学生”)的表格。名册表在 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);
}
}
}
解决方案
Responses
从工作表中检索最后一行的值。- 从工作表中检索“B”列的值
roster
。 - 当工作表的“B”列的值包含在工作表的“D”列的值中时,您想将工作表最后一行的“C”列的值放入工作
Responses
表的“C”列床单。roster
roster
Responses
如果我的理解是正确的,这个答案怎么样?
修改点:
- 我认为
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);
}
}
参考:
添加:
- 当值存在时,您想将该值添加到工作表的“C”列
roster
。
关于你的新问题,如果我的理解是正确的,那么下面的修改呢?
从: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);
}
}
}
推荐阅读
- linux - Nginx 反向代理显示默认页面而不是远程主页
- node.js - 取消意图不暂停/退出
- javascript - 如何在 React 中使表格的每一行都可点击?
- node.js - 在服务器上从文件或从 Mongodb 记录加载 HTML 模板效率更高吗?
- streamsets - Hive 数据库的多个来源
- vb.net - 如何将图表控制代码从 Winform 移动到 dll,同时将图表对象保留在 Winform 中?
- amazon-web-services - SSH 隧道后面的 AWS ELB 重定向不起作用
- laravel - Laravel,使用进度条输出调用许多工匠命令
- c# - 如何访问列表类型的信息以显示在视图中
- php - 配置变量未更新 - Laravel