-2

Я кодирую сценарий Greasemonkey, чтобы щелкнуть кнопку воспроизведения для скрипта в Google Apps Script каждые пять минут, чтобы избежать ограничения времени выполнения, установленного Google.Нажмите кнопку воспроизведения в Google Apps Script с помощью Greasemonkey?

Я смог идентифицировать сценарий, когда закончилось время, но я не могу нажать кнопку «запустить», используя JavaScript. Я проверял кнопку с Google Chrome и пробовал несколько вещей, но я не мог заставить ее работать.

Может ли кто-нибудь мне помочь?

Я думаю, нажав любую кнопку на панели инструментов Google Таблиц будет точно такой же ..

enter image description here

Спасибо!

+1

Вместо greasemonkey используйте триггер, управляемый по времени. См. Https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers –

+0

или html, который улавливает ошибку таймаута и снова вызывает сценарий. –

+0

Я ниспровергаю этот вопрос, потому что он показывает нулевые исследования. Вы просто сделали снимок экрана с консоли. Где ваш код, который не работает так, как вы ожидаете? Читайте также: http://stackoverflow.com/help/how-to-ask –

ответ

0

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

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
// Purpose: Check if there is enough time left for another data output run 
// Input: Start time of script execution 
// Output: Boolean value if time is up 
function isTimeUp(start, need) { 
    var cutoff = 500000 // in miliseconds (5 minutes) 
    var now = new Date(); 
    return cutoff - (now.getTime() - start.getTime()) < need; 
} 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

Здесь start просто new Date(), что вы создаете при запуске сценария. need - это просто среднее время, которое требуется, чтобы мой скрипт выполнил 1 цикл. Если времени для цикла недостаточно, мы отключим скрипт другой функцией.

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
// Purpose: Store current properties and create a trigger to start the script after 1 min 
// Input: propertyCarrier object (current script execution properties) 
// Output: Created trigger ID 
function autoTrigger(passProperties, sysKeys) { 
    var sysProperties = new systemProperties(); 

    if (typeof sysKeys === 'undefined' || sysKeys === null) { 
    sysKeys = new systemKeys(); 
    } 

    var triggerID = ScriptApp.newTrigger('stateRebuild') 
          .timeBased() 
          .after(60000) 
          .create() 
          .getUniqueId(); 

    Logger.log('~~~ RESTART TRIGGER CREATED ~~~'); 

//-------------------------------------------------------------------------- 
// In order to properly retrieve the time later, it is stored in milliseconds 
    passProperties.timeframe.start = passProperties.timeframe.start.getTime(); 
    passProperties.timeframe.end = passProperties.timeframe.end.getTime(); 
//-------------------------------------------------------------------------- 

//-------------------------------------------------------------------------- 
// Properties are stored in User Properties using JSON 
    PropertiesService.getUserProperties() 
        .setProperty(sysKeys.startup.rebuildCache, JSON.stringify(passProperties)); 
//-------------------------------------------------------------------------- 

    Logger.log('~~~ CURRENT PROPERTIES STORED ~~~'); 
    return triggerID; 
} 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

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

Созданный вами триггер должен либо нацеливаться на основную функцию, либо если вам нужно передать данные, как я, вам нужно будет иметь отдельную функцию стартера, чтобы вернуть данные из свойств пользователя и передать их ,