将行范围转移到另一个选项卡,然后清除选项卡而不删除公式



在Google Sheets中,当G16设置为"时,我试图将范围A3:G13(如果有文本;有时不会使用整个范围(从"装箱单"选项卡转移到"已完成交易"选项卡;完整的";然后在不去除公式的情况下清除A3:G13。我见过许多单独传输行的脚本,但我需要它们全部在G15的Edit上传输。

谢谢你的帮助!

https://docs.google.com/spreadsheets/d/1raVbOHsjwK1EHDnIO7jKo1oH4GQXsbfjBD2ormcO87I/edit?ts=5fd250e3#gid=0

代码:

function onEdit(event) { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 
if(s.getName() == "Packing List" && r.getColumn() == 7 && r.getValue() == "Complete") { 
var range = r.getRange(A3:G13); 
var numColumns = s.getLastColumn(); 
var targetSheet = ss.getSheetByName("Completed Transactions"); 
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, numColumns).moveTo(target); 
s.deleteRow(row);

您可以执行以下操作:

  • 使用getValues从源范围中检索值,使用filter过滤掉A列为空的行,并使用setValues设置过滤后的值
  • 使用getFormula检索源范围的公式,并在清除内容后使用setFormula重新设置它们
  • 使用clearContent清除源范围的内容

代码片段:

function onEdit(e) {
const rangeNotation = e.range.getA1Notation();
const editedSheet = e.range.getSheet();
if (editedSheet.getName() === "Packing List" && rangeNotation === "G15" && e.value === "Complete") {
const sourceRange = editedSheet.getRange("A3:G13");
const sourceFormulas = sourceRange.getFormulas();
const sourceData = sourceRange.getValues().filter(row => row[0] != "");
const targetSheet = e.source.getSheetByName("Completed Transactions");
const targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1, sourceData.length, sourceData[0].length);
targetRange.setValues(sourceData);
sourceRange.clearContent();
sourceRange.setFormulas(sourceFormulas);
}
}

最新更新