首页 > 解决方案 > 从工作表 A 复制行并将其附加到 Google 工作表的工作表 B 中

问题描述

我有包含几行的工作表 A,当单击复选框时,它应该复制到工作表 B 中。

表 A

在此处输入图像描述

当我选择一个复选框时,我希望该记录复制到工作表 B 中,并保留在工作表 A 中,只有 ID 和名称

这是我写的代码

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

  if (s.getName() == "SheetA" && r.getColumn() == 8 && r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn() - 1;
    var targetSheet1 = ss.getSheetByName("SheetB");
    var target1 = targetSheet1.getRange(targetSheet1.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target1);
    Browser.msgBox("Your Record Submitted");
    s.deleteRow(row);
  }
}

提前致谢

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


我相信你的目标如下。

  • When the checkbox at the column "H" in "SheetA" is checked, you want to copy the values (columns "A" to "G") of the same row with the checkbox to the next row of the last row of "SheetB " 使用带有 Google Apps 脚本的简单触发器。
  • 复制值时,您希望保留“A”和“B”列的值。

修改点:

  • 在您的脚本中, bys.getRange(row, 1, 1, numColumns).moveTo(target1);会移动该行的所有值。这样,“A”和“B”列的值也被删除。而且, by s.deleteRow(row);,该行被删除。

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

function onEdit(event) {
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if (s.getName() == "SheetA" && r.getColumn() == 8 && r.getValue() === true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn()-1;
    var targetSheet1 = event.source.getSheetByName("SheetB");
    var target1 = targetSheet1.getRange(targetSheet1.getLastRow() + 1, 1);
    
    // I modified below script.
    var range = s.getRange(row, 1, 1, numColumns);
    if (!range.getValues()[0].every(e => e.toString() == "")) {  // Added
      range.copyTo(target1);
      range.offset(0, 2, 1, 5).clearContent();
      range.offset(0, 7).uncheck();
      Browser.msgBox("Your Record Submitted");
    }
  } 
}
  • 使用此脚本时,请勾选“SheetA”中“H”列的复选框。这样,脚本就运行了。运行脚本时,“A”到“G”列的值被复制到“SheetB”,“C”到“G”列的值被清除。而且,该复选框未选中。这样,“A”和“B”列的值不会被删除。
  • 使用时range.offset(0, 2, 1, 6).clearContent();range.offset(0, 7).uncheck();不需要使用。但是在这种情况下,复选框的值也被删除了。所以在这个修改中,我使用了uncheck(). 这样,复选框的值更改为FALSE

参考:


推荐阅读