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