В Google Таблицах я пытаюсь перенести диапазон A3: G13 (если есть текст; иногда весь диапазон не будет использоваться) с вкладки «Упаковочный список» на вкладку «Завершенные транзакции», когда для G16 установлено значение «Завершить», а затем очистить A3:G13 без удаления формул. Я видел много скриптов, которые передают строки по отдельности, но мне нужно, чтобы они все передавались onEdit G15.
Спасибо за вашу помощь!
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);
Извините, обновленная ссылка теперь общедоступна.
У вас есть код, над которым вы работаете? Вы хотите сохранить форматирование диапазона и формулы при копировании на целевой лист?
Я пытался собрать воедино части кода, но ничего не получилось, поэтому я удалил его целиком. Я не очень хорошо разбираюсь в использовании сценариев, поэтому пытался начать с этого примера кода, который по отдельности переносит строки на другой лист, но мне нужно, чтобы он был сгруппирован вместе и только тогда, когда для G16 установлено значение «Завершить». Мне не нужно копировать формулы на целевой лист, только значения.
function onEdit(event) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = event.source.getActiveSheet(); var r = event.source.getActiveRange(); if (s.getName() == "Упаковочный лист" && r.getColumn() == 7 && r.getValue() == "Завершено") { var range = r.getRange(A3:G13); var numColumns = s.getLastColumn(); var targetSheet = ss.getSheetByName("Завершенные транзакции"); var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); s.getRange(row, 1, 1, numColumns).moveTo(target); s.deleteRow(строка);
Вы можете сделать следующее:
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);
}
}
Спасибо! Отлично сработало! Очень ценю вашу помощь
Электронная таблица, которой вы поделились, не является общедоступной. Вы можете сделать ее общедоступной? Кроме того, можете ли вы показать, что вы пробовали до сих пор? У вас есть код, над которым вы работаете? С какой конкретной проблемой вы столкнулись?