试图通过复选框在同一文档中将行从一张纸复制到另一张纸,但是要稍加扭曲

问题描述 投票:0回答:1

我正在建立清单,因此在源工作表上有一个主列表(完整清单),每个项目旁边都有复选框。我希望将所有选中的项目按照它们在主列表中出现的顺序复制到目标表中。请看下面的截图。当在源工作表上选中前四个复选框时(将其称为单元格B3:B6),所有四个项目(分别为单元格C3:H3,C4:H4,C5:H5和C6:H6)都复制到目标工作表。当随后在源工作表上取消选中第三个产品下降(复选框B5)时,目标工作表上的相应内容(单元格C5:H5)将被删除,其余行向上折叠。如果要对B5进行后续检查,则将按照产品A在源纸上出现的顺序重新插入产品A的内容,这看起来像是第二张屏幕截图,其中所有4个产品均按顺序出现。对于整个脚本工作来说,我是新手,我想这是为“在一张纸到另一张纸之间移动一行”问题和某种Loop(for)问题提供的其他解决方案的组合。预先感谢您一百万次的帮助和时间!Scrsht 1 source sheet w/ checkboxes checked, Scrnsht 2 destination sheet result of Scrsht 1, Scrsht 3 source sheet with row unchecked, Scrsht 4 destination sheet result of unchecking box in ScrSht 3

所以这是一个脚本,将行从Sheet13复制到Sheet14。问题是1.由于“目标”变量将其添加到目标列表的底部,因此var的行引用为“ .getLastRow + 1”,2.当行上的复选框未选中时,行不会消失/被删除。未选中源工作表,3.如果重新选中了一个复选框,则相应的数据会再次添加到目标工作表列表的底部(即使重复)。

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
 if(s.getName() == "Sheet13" && r.getColumn() == 2 && r.getValue() == true) {
  var row = r.getRow();
  var numColumns = s.getLastColumn();
  var targetSheet = ss.getSheetByName("Sheet14");
  var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 2);
  s.getRange(row, 3, 1, numColumns).copyTo(target); 
}

}

copy rows collapse uncheck check
1个回答
0
投票

所以这是一个脚本,将行从Sheet13复制到Sheet14。问题是1.由于“目标”变量将其添加到目标列表的底部,因此var的行引用为“ .getLastRow + 1”,2.当行上的复选框未选中时,行不会消失/不会被删除。未选中源工作表; 3.如果重新选中了一个复选框,则相应的数据将再次添加到目标工作表列表的底部(即使重复)。

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(s.getName() == "Sheet13" && r.getColumn() == 2 && r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Sheet14");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 2);
    s.getRange(row, 3, 1, numColumns).copyTo(target); 
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.