如果基于多个单元格中的条件不重复,则将单个单元格复制到另一个表单

时间:2015-06-15 00:56:06

标签: google-apps-script google-sheets

这是上一篇文章的后续内容,但我无法弄清楚如何将其添加到之前的帖子中。这是前一篇文章的链接。 Copying Data Sheet1 to Sheet2 so you can sort & edit both sheets (google apps script?)

第二部分 感谢Daniel, 我有以下内容 在sheet1(Participant_Registration)上有一个按钮,当按下时,它会向sheet1和sheet2(Learning_Sessions_Attendance)添加ID。 然后我们使用vlookup函数将列B-D从sheet1传输到sheet2 我编写了自己的脚本来为参与者添加说明。

现在这就是我现在需要帮助的地方。 对原始脚本的小修复 该剧本虽然很棒,却开始将ID编号为2而不是1.有没有办法解决这个问题?

新脚本 在sheet1(Participant_Registration)上,如果列L,M或N具有值=“Group1”,我希望将ID(在A列中)转移到sheet3(Consultation1_Attendance)。 如果L,M或N的值为“Group2”,我希望(A列)中的ID转移到Sheet4(Consultation2_Attendance)。

以下是新脚本的注意事项,这使我很难编写它。 在训练过程中,人们可能会改变组,这意味着函数可能需要一个onEdit函数,而不能仅仅转移最后一行。如果该表格上尚未提供该ID,则需要转移活动行并仅将其转移到咨询出席表格。 我尝试了查询公式 - 不起作用,因此您无法对咨询考勤表中的行进行排序,我们正在向该表中添加新数据。

注意:最终我将使用此脚本来拥有10个可能的咨询组。我不确定是否有办法按照组的数量自动复制工作表Consultation1_Attendance并将其填充给分配给该组的人员。

这是表格的链接。 https://docs.google.com/spreadsheets/d/1cvKO2tPKeZdLWHc2XVfli8lYVylXCas4VgSG-wB_lLM/edit?usp=sharing

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
  }
}

1 个答案:

答案 0 :(得分:0)

看看这一行:

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);