gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:45:31 25 4
gpt4 key购买 nike

我对 Google Scripts 还是很陌生。我有一个学生花名册 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 列将是运行脚本的结果。

最佳答案

  • 您想从问题图像中的“花名册表”的值中获得“示例最终结果响应表”。
    • 在您的情况下,“回复表”只有包含电子邮件地址的“B”列。
    • 您想将来自电子邮件地址的 ID 与“roster sheet”中的“A”列相同的值放入。
  • 您想使用 Google Apps 脚本实现这一目标。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

修改后的脚本流程如下。

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

修改后的脚本:

function extractId() {
var responsesSheet = SpreadsheetApp.openById('XXXXXXX').getSheetByName('Sheet1');
var rosterSheet = SpreadsheetApp.openById('XXXXXXX').getSheetByName('Sheet1');
var valuesOfresponsesSheet = responsesSheet.getRange(2, 2, responsesSheet.getLastRow() - 1, 1).getValues();
var valuesOfrosterSheet = rosterSheet.getRange(2, 1, rosterSheet.getLastRow() - 1, 8).getValues();
var obj = valuesOfrosterSheet.reduce(function(o, e) {
o[e[0]] = [e[0], e[1], e[5], e[6], e[7]];
return o;
}, {});

// var resultValues = valuesOfresponsesSheet.map(function(e) {return obj[e[0].replace(/\@(.*)/i,"")]});
var resultValues = valuesOfresponsesSheet.map(function(e) {return obj[e[0].toString().replace(/\@(.*)/i,"")] || ["","","","",""]}); // Modified

responsesSheet.getRange(2, 3, resultValues.length, resultValues[0].length).setValues(resultValues);
}

引用:

关于javascript - 使用 for 循环将数据从一个 Google 表格映射到另一个 Google 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com