GAS withSuccessHandler работает для некоторых функций, но не для других

1

Этот проект прилагается к электронной таблице:

HTML.html:

<!DOCTYPE html>
<html>
  <head>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
   <script>
function script2() {
    google.script.run.doSomething();
}
function RunUpdateYearsManual() {
google.script.run.withSuccessHandler(script2).resetIndicatorsUpdateYears();
}
   </script>
  </head>
  <body>
 <input type="button" value="Update" onClick="RunUpdateYearsManual();" />
 <br><p></p>

  </body>
</html>

Code.gs:

function doSomething() {
  Logger.log('I was called! CALLED');
}

function resetIndicatorsUpdateYears() {
var newD = new Date();
var hour = newD.getHours();
var minute = newD.getMinutes();
var second = newD.getSeconds();
var s3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Intro")
s3.getRange("F29").setNote("Started last update cycle on: "+ newD);
s3.getRange("F31:F46").setValue("Skipped").clearFormat();
s3.getRange("F30").setValue("Waiting").clearFormat();
s3.getRange("F30").setNote("Waiting for Year and English Lists Update.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F31").setNote("Skipped Company Lists Update 0001-0350.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F32").setNote("Skipped Company Lists Update 0351-0700.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F33").setNote("Skipped Company Lists Update 0701-1050.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F34").setNote("Skipped Company Lists Update 1051-1400.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F35").setNote("Skipped Company Lists Update 1401-XXXX.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F36").setNote("Skipped Bundled Games In Year and English Lists Update.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F37").setNote("Skipped Bundled Games In Company Lists Removal 0001-0600.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F38").setNote("Skipped Bundled Games In Company Lists Removal 0601-1200.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F39").setNote("Skipped Bundled Games In Company Lists Removal 1201-XXXX.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F40").setNote("Skipped Empty Rows Sorting 0001-0400.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F41").setNote("Skipped Empty Rows Sorting 0401-0800.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F42").setNote("Skipped Empty Rows Sorting 0801-1200.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F43").setNote("Skipped Empty Rows Sorting 1201-1600.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F44").setNote("Skipped Empty Rows Sorting 1601-XXXX.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F45").setNote("Skipped Empty Rows Removal 0001-0900.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
s3.getRange("F46").setNote("Skipped Empty Rows Removal 0900-XXXX.\n\n\n"+"Started at: "+hour+":"+minute+":"+second); 
deleteFormulas();
  Logger.log('I was called! TEST');
}

Но это, похоже, не работает, я запускаю RunUpdateYearsManual, и все, что он делает, выполняет первую функцию, не запуская вторую, регистратор возвращает только "Я был вызван! TEST", там нет сбоя, и использование сFailureHandler не помогает.

Но вот странная часть об этом, если я удалю эти строки, редактируя F30: F46 в моем коде и сделаю это примерно так:

Code.gs:

function doSomething() {
  Logger.log('I was called! CALLED');
}

function resetIndicatorsUpdateYears() {
var newD = new Date();
var hour = newD.getHours();
var minute = newD.getMinutes();
var second = newD.getSeconds();
var s3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Intro")
s3.getRange("F29").setNote("Started last update cycle on: "+ newD);
  Logger.log('I was called! TEST');
}

Теперь это работает, и я вижу "я был вызван! ВЫЗОВ" в регистраторе.

Поэтому я полностью потерялся здесь. Я предполагаю, что это может быть какое-то ограничение для того, чтобы исходный сценарий был длиннее? Но для запуска требуется менее 20 секунд, и единственная документация, которая подходит близко, которую я могу найти, - это время выполнения пользовательских функций, которое ограничено 30 секундами/выполнением, но не думайте, что здесь есть случай.

Любая помощь здесь будет оценена по достоинству.

  • 0
    Для сценария, который withSuccessHandler не запускается, есть ли deleteFormulas() ? Или deleteFormulas() работает нормально? Казалось, что resetIndicatorsUpdateYears() остановлен на deleteFormulas() . Так что ваш второй сценарий может сработать. Если моя оценка неверна, извините.
  • 0
    deleteFormulas отлично работает сама по себе, но я также подумал, что это может быть проблемой, и я попробовал код без него, но результат тот же, он не переходит ко второй функции. Я также попытался запустить измененный код с ним, и он тоже отлично работает, так что это не проблема.
Показать ещё 1 комментарий
Теги:
google-apps-script
google-sheets

2 ответа

0
Лучший ответ

С помощью пользователей на форумах Google (https://plus.google.com/111489556118142836691/posts/53tX2fW6D6M) мне удалось найти и исправить проблему.

В принципе, вам нужно оставить окно пользовательского интерфейса, которое вы использовали для запуска функций, окно, очевидно, заблокирует вас от работы над таблицей, поэтому пользовательский интерфейс боковой панели будет работать так же, как пользовательский интерфейс, который вы использовали для запуска первой функции просто нужно оставаться открытым. Если вы закроете этот пользовательский интерфейс в любой момент, текущая функция завершит работу, но не вызовет другого.

Не совсем уверен, почему это так, но это, похоже, все решает.

0

Как насчет следующей модификации? В этом модифицированном скрипте я пытался сократить время процесса, используя setNotes() для resetIndicatorsUpdateYears(). Попробуйте этот модифицированный образец.

setNotes() информацию о setNotes() можно setNotes() здесь.

Измененный скрипт:

function resetIndicatorsUpdateYears() {
  var newD = new Date();
  var hour = newD.getHours();
  var minute = newD.getMinutes();
  var second = newD.getSeconds();
  var s3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Intro")
  s3.getRange("F29").setNote("Started last update cycle on: "+ newD);
  s3.getRange("F31:F46").setValue("Skipped").clearFormat();
  s3.getRange("F30").setValue("Waiting").clearFormat();
  var data = [["Waiting for Year and English Lists Update.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Company Lists Update 0001-0350.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Company Lists Update 0351-0700.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Company Lists Update 0701-1050.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Company Lists Update 1051-1400.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Company Lists Update 1401-XXXX.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Bundled Games In Year and English Lists Update.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Bundled Games In Company Lists Removal 0001-0600.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Bundled Games In Company Lists Removal 0601-1200.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Bundled Games In Company Lists Removal 1201-XXXX.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Empty Rows Sorting 0001-0400.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Empty Rows Sorting 0401-0800.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Empty Rows Sorting 0801-1200.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Empty Rows Sorting 1201-1600.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Empty Rows Sorting 1601-XXXX.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Empty Rows Removal 0001-0900.\n\n\n"+"Started at: "+hour+":"+minute+":"+second],
  ["Skipped Empty Rows Removal 0900-XXXX.\n\n\n"+"Started at: "+hour+":"+minute+":"+second]];
  s3.getRange("F30:F46").setNotes(data);
  // deleteFormulas();
  Logger.log('I was called! TEST');
}
  • 0
    Я действительно ценю ответ (и, вероятно, буду использовать ваш код!), Но это, похоже, не решает проблему. Вторая функция по-прежнему не запускается, ваша версия кода значительно быстрее (примерно вдвое), но все же кажется слишком длинной. Я использую ваш код, и он всегда выводит «Я был вызван! ТЕСТ» на консоль, я использую более короткую версию своего кода, и «Я был вызван! ВЫЗОВ» теперь отображается правильно. Еще раз спасибо, но на данный момент я более склонен полагать, что это проблема с GAS, а не с любым кодом.
  • 0
    @Sharert Fukae Спасибо за дополнительную информацию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню