У меня есть документ, в котором в любой момент есть около 5 человек. У меня есть 15 отдельных скриптов типа "onEdit (e)". Сценарий, который вы видите ниже, извлекает данные из одной вкладки и перемещает их в другую, когда в соответствующем столбце указано значение «да», введенное пользователем.
Общая форма этого скрипта существует в течение многих месяцев для нескольких других вкладок. Мы дублируем скрипт для каждой новой вкладки. Это работало в течение нескольких месяцев без проблем. Сегодня я попытался дублировать его для этих вкладок "kabazi", но у него есть проблемы.
Обычно это работает, но иногда (когда-то от 5 до 15) происходит сбой. Визуально не удается скопировать данные на другую вкладку; Я использовал строку Browser.msgbox
в качестве произвольного отладчика, чтобы увидеть, где происходит сбой скрипта. Я переместил его в коде так, чтобы в зависимости от того, появляется ли окно с сообщением или нет, я знаю, что это был сценарий сбоя (если есть лучший способ, дайте мне знать!).
Интересно, что сценарий на самом деле выходит из строя более чем в 1 месте, но случайно. Например, иногда происходит сбой:
target_sheet.insertRowAfter(last_row);
в других случаях происходит сбой:
source_sheet.getRange(edited_row, 1, 1, 9).copyTo(target_range);
это может также провалиться в других местах, но я не зашел так далеко с этим. Моя единственная мысль, возможно, заключается в том, что вызов onEdit (e) для других сценариев происходит в то же время, когда этот сценарий выполняется, и это влияет на производительность. В противном случае я понятия не имею, почему это иногда терпит неудачу. В скрипте нет ошибок.
Есть идеи?
Спасибо.
function onEdit(e){ // <---- (e)
var edited_range = e.range;
var edited_row = edited_range.getRow();
var activeSheet = e.source.getActiveSheet();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = ss.getSheetByName("Kabazi Pitches");
var target_sheet = ss.getSheetByName("Kabazi In Progress");
var last_row = target_sheet.getLastRow();
var range_values = target_sheet.getRange("A1:A").getValues();
var range_length = range_values.filter(String).length + 1;
var target_range = target_sheet.getRange(range_length,1);
if (activeSheet.getName() == "Kabazi Pitches") {
if (edited_range.getColumn() == 10) {
if (edited_range.getValue().toLowerCase() == "yes") {
target_sheet.insertRowAfter(last_row);
Browser.msgBox(edited_range.getColumn());
source_sheet.getRange(edited_row, 1, 1, 9).copyTo(target_range);
source_sheet.getRange(edited_row, 10, 1, 2).setValue("");
source_sheet.deleteRow(edited_row) }}}; // this will delete out the row of data from the Unmarketed tab so it is no longer there.
}