Бесконечный цикл GoogleAppScript - PullRequest
0 голосов
/ 20 мая 2019

Как я могу создать бесконечный цикл, который неоднократно изменяет значение ячейки в Google-app-script?

function doTest() {    
    if(x>=360) x = 0;
  Utilities.sleep(500);
      x = x+1;   
  SpreadsheetApp.getActiveSheet().getRange('a13').setValue(x);  
  incr();
}

Я бы хотел увеличить значение ячейки, пока оно не достигнет 360, а затем начать с 0.

Ответы [ 3 ]

1 голос
/ 21 мая 2019

Бесконечный цикл в конечном итоге приведет к краху вашего приложения. Но если предположить, что это то, к чему вы стремитесь, вот один из способов сделать это:

function iterate() {
    var range = SpreadsheetApp.getActiveSheet().getRange('a13');
    var i = 0;

    while(true) {
        range.setValue(i);
        SpreadsheetApp.flush();
        i = (++i) % 361; 
    }
}
1 голос
/ 21 мая 2019
  • Вы хотите подсчитывать значение номера ячейки «A13» в активной электронной таблице каждые 0,5 секунды.
  • Вы хотите зациклить число от 0 до 360.
  • Вы хотите зациклить этот цикл как бесконечный цикл.

Если мое понимание верно, как насчет этого примера сценария? Я думаю, что есть несколько ответов для вашей ситуации. Поэтому, пожалуйста, подумайте об этом как об одном из них. В этом примере сценария я использовал боковую панель. А именно, я использовал Javascript и Google Apps Script. Я думал, что бесконечный цикл может быть достигнут путем запуска скрипта Google Apps из боковой панели. Я могу подтвердить, что в моей среде это число может быть больше, чем максимальное время выполнения сценария Google Apps, равное 6 минутам.

Использование:

При использовании этого сценария выполните следующий поток действий.

  1. Скопируйте и вставьте следующий скрипт в редактор скриптов (скрипт-контейнер Spreadsheet).
  2. Запустить функцию run().
    • При этом в электронной таблице открывается боковая панель.
  3. Когда вы нажимаете кнопку «Пуск», число помещается в ячейку «A13» активного листа, и значение подсчитывается каждые 0,5 секунды. Число повторяет цикл от 0 до 360.
    • Если вы хотите остановить подсчет, пожалуйста, нажмите кнопку «Стоп».

Пример сценария:

function setValue(v) {
  Utilities.sleep(500);
  SpreadsheetApp.getActiveSheet().getRange("A13").setValue(v);
}

function run() {
  var str = '<input type="button" value="start" onclick="start()"><input type="button" id="stop" value="stop" onclick="stop=false"><script>var stop=false; function work(v){return new Promise((resolve, reject)=> google.script.run.withSuccessHandler(()=> resolve()).setValue(v));}async function start(){stop=true; var i=0; while(stop){await work(i); i=(++i) % 361;}}</script>';
  var html = HtmlService.createHtmlOutput(str);
  SpreadsheetApp.getUi().showSidebar(html);
}
Расширенный HTML:

В приведенном выше примере сценария HTML минимизирован. Ниже приведен скрипт расширенного HTML.

Это только для подтверждения HTML. Поэтому вам не нужно копировать и вставлять это.

<input type="button" value="start" onclick="start()">
<input type="button" id="stop" value="stop" onclick="stop=false">

<script>
  var stop = false;

  function work(v) {
    return new Promise((resolve, reject) => google.script.run.withSuccessHandler(() => resolve()).setValue(v));
  }

  async function start() {
    stop = true;
    var i = 0;
    while(stop) {
      await work(i);
      i = (++i) % 361;  // This is from Dimu Designs's answer.
    }
  }
</script>

Примечание:

Ссылки:

Если этот метод не был направлением вашей цели, я прошу прощения.

0 голосов
/ 20 мая 2019

Следующее выполняет работу!
Обратите внимание на вызов flush, это гарантирует, что электронная таблица будет обновляться на каждой итерации.
В противном случае вы не увидите обновление ячейки в реальном времени.Наслаждайтесь; -)

function doIncrease() {
  for(var x=0;;x++){
    //Set value
    SpreadsheetApp.getActiveSheet().getRange('a13').setValue(x);
    //Flush changes to spreadsheet
    SpreadsheetApp.flush();
    //Wait as long as desired
    Utilities.sleep(500);
    //Reboot the Endless loop from 0 to 360
    if(x==360) x=0;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...