Google apps script 根据多个单元格中的条件,将一张工作表中的单元格复制到另一张工作表中(如果不是副本)

Google apps script 根据多个单元格中的条件,将一张工作表中的单元格复制到另一张工作表中(如果不是副本),google-apps-script,google-sheets,Google Apps Script,Google Sheets,这是前一篇文章的后续文章,但我不知道如何将其添加到前一篇文章中。这是之前文章的链接。 第二部分 多亏了丹尼尔, 我有以下几点 在表1(参与者注册)上有一个按钮,按下该按钮时,会将ID添加到表1和表2(学习课程出席)。 然后,我们使用vlookup函数将B-D列从sheet1传输到sheet2 我编写了自己的脚本,为参与者添加说明 这就是我现在需要帮助的地方。 对原始脚本的小修改 这个脚本虽然很神奇,但从1开始将ID编号为2。有办法解决这个问题吗 新剧本 在表1(参与者注册)上,如果L、M或N列

这是前一篇文章的后续文章,但我不知道如何将其添加到前一篇文章中。这是之前文章的链接。

第二部分 多亏了丹尼尔, 我有以下几点 在表1(参与者注册)上有一个按钮,按下该按钮时,会将ID添加到表1和表2(学习课程出席)。 然后,我们使用vlookup函数将B-D列从sheet1传输到sheet2 我编写了自己的脚本,为参与者添加说明

这就是我现在需要帮助的地方。 对原始脚本的小修改 这个脚本虽然很神奇,但从1开始将ID编号为2。有办法解决这个问题吗

新剧本 在表1(参与者注册)上,如果L、M或N列的值为=“Group1”,我希望将ID(a列)转移到表3(咨询1)上。 如果L、M或N的值为=“Group2”,我希望将(a列)中的ID转移到Sheet4(咨询2_出席)

以下是对新脚本的考虑,这使得我很难编写它。 在培训过程中,人们可能会更改组,这意味着该函数可能需要是onEdit函数,而不能仅传输最后一行。它需要转移活动行,并且仅当ID不在咨询考勤表上时才将其转移到咨询考勤表。 我尝试了查询公式-不起作用,因为您无法对咨询考勤表中的行进行排序,我们正在向该表添加新数据

注意:最终我将使用这个脚本来创建10个可能的咨询小组。我不确定是否有一种方法可以自动按组数复制表咨询1_出席情况,并用分配给该组的人员填充

这是一个到工作表的链接。

code.gs下的代码将运行。我在ConsultGpAssign.gs下尝试了这段代码(这是非常可悲的尝试)。我只是在学习。我一直在尝试各种各样的事情,真的需要帮助

我还粘贴了一个尝试,显然在这里不起作用

function onEdit(event) {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Participant_Registration" && ((r.getColumn() == 12 &&     r.getValue() == "Group1") || (r.getColumn() == 13 && r.getValue() == "Group1") || (r.getColumn() == 14 && r.getValue() == "Group1"))) {
    var row = r.getRow();  //Not sure if this works

    //only want to transfer ID column A not sure how to do this
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Consultation1_Attendance");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target); //Only want to  transfer information if it's not already on sheet. Do not want to delete
  }
}
看看这一行:

s.getRange(row, 1, 1, numColumns).moveTo(target); //Only want to  transfer information if it's not already on sheet. Do not want to delete
moveTo()
方法会缩小范围。但是你的评论说你不想删除。剪切范围将删除它。您已经定义了目标范围。使用
getValues()
获取要复制的内容:

var myValuesToCopy = s.getRange(row, 1, 1, numColumns).getValues();
target.setValues(myValuesToCopy);
看看这一行:

s.getRange(row, 1, 1, numColumns).moveTo(target); //Only want to  transfer information if it's not already on sheet. Do not want to delete
moveTo()
方法会缩小范围。但是你的评论说你不想删除。剪切范围将删除它。您已经定义了目标范围。使用
getValues()
获取要复制的内容:

var myValuesToCopy = s.getRange(row, 1, 1, numColumns).getValues();
target.setValues(myValuesToCopy);

您正在递增
max++”。第71行。将该行移到两行
setValue()
之外,编号应从1开始。但是,您需要在声明值的同时为
最大值
赋值。现在,您通过不分配任何内容将其声明为未定义。变化
var最大
var最大值=1谢谢你的建议,但不幸的是它没有起作用。如果我将最大值设为1,则它始终为1 var max=1。当我在SetValue行之后移动max++到时,也会发生同样的情况。我总是可以在两张纸上都放一个1作为顶部ID,作为一种变通方法(已经非常幸运有了计数器的帮助),但我只是想有一种方法可以从1开始编程。在原始脚本中,使
var MaxID=0而不是
var MaxID=1
(问题不完全在Maxime++中。函数
getBiggestID
返回1作为当前最大的ID,即使没有ID),因此现在ID从1开始。因为代码最初是有效的,所以感到困惑。您正在递增
max++”。第71行。将该行移到两行
setValue()
之外,编号应从1开始。但是,您需要在声明值的同时为
最大值
赋值。现在,您通过不分配任何内容将其声明为未定义。变化
var最大
var最大值=1谢谢你的建议,但不幸的是它没有起作用。如果我将最大值设为1,则它始终为1 var max=1。当我在SetValue行之后移动max++到时,也会发生同样的情况。我总是可以在两张纸上都放一个1作为顶部ID,作为一种变通方法(已经非常幸运有了计数器的帮助),但我只是想有一种方法可以从1开始编程。在原始脚本中,使
var MaxID=0而不是
var MaxID=1
(问题不完全在Maxime++中。函数
getBiggestID
返回1作为当前最大的ID,即使没有ID),因此现在ID从1开始。因为代码最初是有效的,所以感到困惑。您正在递增
max++”。第71行。将该行移到两行
setValue()
之外,编号应从1开始。但是,您需要在声明值的同时为
最大值
赋值。现在,您通过不分配任何内容将其声明为未定义。变化
var最大
var最大值=1谢谢你的建议,但不幸的是它没有起作用。如果我将最大值设为1,则它始终为1 var max=1。当我在SetValue行之后移动max++到时,也会发生同样的情况。我总是可以在两张纸上都放一个1作为顶部ID,作为一种变通方法(已经非常幸运有了计数器的帮助),但我只是想有一种方法可以从1开始编程。在原始脚本中,使
var MaxID=0而不是
var MaxID=1
(问题不完全在Maxime++中。函数
getBiggestID
返回1作为当前最大ID,即使有n个