Я использую функцию Google Scripts в Google Sheets для копирования строк с одного листа на другой на основе определенных критериев. По сути, я хочу переместить «Запросы» в Архив или в Подтвержденный пул. Из подтвержденного пула я хочу переместить их в архив после их завершения.
Я пытался перемещать код несколькими способами, включая разделение его на разные сценарии и сохранение его в одном и том же сценарии. Части кода работают одновременно - например, я обычно могу перемещать запросы в подтвержденный пул или в архив. Сначала я думал, что проблема в том, что я использовал один и тот же столбец на разных листах. Я изменил это, но это не исправило код. Затем я обнаружил, что несколько сценариев "onEdit" не могут выполняться на одном листе, поэтому я изменил имя одного из них на onEdit2, а затем на "myBookingRequests". Это изменение тоже не сработало.
Код имеет тенденцию ломаться, когда я пытаюсь переместить что-либо из подтвержденного пула в архив, поэтому теперь я думаю, что проблема в том, что я перемещаю строки в лист и беру строки из листа. Любая помощь о том, как решить эту проблему или удалить конфликты из кодов, поможет. Спасибо.
Два сценария разделены:
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Booking Requests" && r.getColumn() == 12 && r.getValue() == "Y") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Confirmed Bookings");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row); }
if(s.getName() == "Booking Requests" && r.getColumn() == 13 && r.getValue() == "Y") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Archived Bookings");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row); }
}
function onEdit2(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Confirmed Bookings" && r.getColumn() == 14 && r.getValue() == "Y") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Archived Bookings");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row); }
if(s.getName() == "Confirmed Bookings" && r.getColumn() == 15 && r.getValue() == "Y") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Archived Bookings");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row); }
}
Объединить сценарии просто, так как мне просто нужно добавить два дополнительных предложения if под тем же заголовком.
Я не получил никаких реальных сообщений об ошибках, поэтому я предполагаю, что некоторые части кода негативно взаимодействуют с другими. Любая помощь по предотвращению конфликта кода будет отличной. Спасибо.
(Кроме того, я очень неопытный. Я делаю это только тогда, когда мне нужно сделать функциональные таблицы для работы.)
Журнал выполнения после отделения проблемной области (Запросы на бронирование -> Подтвержденные заказы):
[19-07-03 14:20:54:610 CDT] Starting execution
[19-07-03 14:20:54:617 CDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
[19-07-03 14:20:54:618 CDT] SpreadsheetApp.getActive() [0 seconds]
[19-07-03 14:20:54:619 CDT] Spreadsheet.getActiveSheet() [0 seconds]
[19-07-03 14:20:54:620 CDT] SpreadsheetApp.getActive() [0 seconds]
[19-07-03 14:20:54:620 CDT] Spreadsheet.getActiveRange() [0 seconds]
[19-07-03 14:20:54:693 CDT] Sheet.getName() [0.072 seconds]
[19-07-03 14:20:54:694 CDT] Range.getColumn() [0 seconds]
[19-07-03 14:20:54:788 CDT] Range.getValue() [0.093 seconds]
[19-07-03 14:20:54:788 CDT] Range.getRow() [0 seconds]
[19-07-03 14:20:54:875 CDT] Sheet.getLastColumn() [0.086 seconds]
[19-07-03 14:20:54:876 CDT] Spreadsheet.getSheetByName([Confirmed Requests]) [0.001 seconds]
[19-07-03 14:20:54:975 CDT] Sheet.getLastRow() [0.098 seconds]
[19-07-03 14:20:54:976 CDT] Sheet.getRange([995, 1]) [0 seconds]
[19-07-03 14:20:54:977 CDT] Sheet.getRange([4, 1, 1, 12]) [0 seconds]
[19-07-03 14:20:54:977 CDT] Range.copyTo([Range]) [0 seconds]
[19-07-03 14:20:55:084 CDT] Sheet.deleteRow([4]) [0.106 seconds]
[19-07-03 14:20:55:094 CDT] Execution failed: The coordinates of the target range are outside the dimensions of the sheet. (line 12, file "Code") [0.47 seconds total runtime]