Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无限循环GoogleAppScript_Javascript_Loops_Google Apps Script - Fatal编程技术网

Javascript 无限循环GoogleAppScript

Javascript 无限循环GoogleAppScript,javascript,loops,google-apps-script,Javascript,Loops,Google Apps Script,如何创建一个无限循环,在Google应用程序脚本中重复更改单元格值 function doTest() { if(x>=360) x = 0; Utilities.sleep(500); x = x+1; SpreadsheetApp.getActiveSheet().getRange('a13').setValue(x); incr(); } 我希望它增加一个单元格值,直到它达到360,然后从0开始计算。请执行以下操作 注意调用flus

如何创建一个无限循环,在Google应用程序脚本中重复更改单元格值

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

我希望它增加一个单元格值,直到它达到360,然后从0开始计算。

请执行以下操作
注意调用
flush
,这将确保电子表格在每次迭代时都会刷新。
否则,您将无法实时看到单元格更新。 享受;-)


无限循环最终会使你的应用程序崩溃。但假设这就是你想要的,这里有一种方法:

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

    while(true) {
        range.setValue(i);
        SpreadsheetApp.flush();
        i = (++i) % 361; 
    }
}
  • 您希望每0.5秒计算一次活动电子表格上单元格“A13”的数值
  • 您希望将数字从0循环到360
  • 您希望将此循环循环为无限循环
如果我的理解是正确的,那么这个示例脚本怎么样?我认为对你的情况有几个答案。所以,请把这看作是其中之一。在这个示例脚本中,我使用了一个侧栏。也就是说,我使用了Javascript和GoogleApps脚本。我认为通过从侧边栏运行GoogleApps脚本可以实现无限循环。我可以确认,在我的环境中,此计数的运行时间可能超过Google Apps脚本的最大执行时间6分钟

用法: 使用此脚本时,请执行以下流程

  • 将以下脚本复制并粘贴到脚本编辑器(电子表格的容器绑定脚本)
  • 运行函数
    Run()
    • 这样,电子表格上就会打开一个侧栏
  • 当您单击“开始”按钮时,该数字将被放入活动工作表的单元格“A13”,并且该值每0.5秒计数一次。该数字从0循环到360。
    • 如果要停止计数,请单击“停止”按钮
  • 示例脚本:
    函数设置值(v){
    睡眠(500);
    电子表格app.getActiveSheet().getRange(“A13”).setValue(v);
    }
    函数运行(){
    var str='var stop=false;函数work(v){return new Promise((resolve,reject)=>google.script.run.withSuccessHandler(()=>resolve()).setValue(v));}异步函数start(){stop=true;var i=0;while(stop){wait work(i);i=(++i)%361;};
    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>
    
    
    var-stop=false;
    职能工作(五){
    返回新承诺((resolve,reject)=>google.script.run.withSuccessHandler(()=>resolve()).setValue(v));
    }
    异步函数start(){
    停止=真;
    var i=0;
    while(停止){
    等待工作(一);
    i=(++i)%361;//这是Dimu Designs的答案。
    }
    }
    
    注:
    • 我使用循环过程
    参考资料:

    如果此方法不是您的目标方向,我很抱歉。

    使用
    for循环
    while
    循环。在任何情况下,请注意脚本运行时都有配额,函数在时间结束前不会运行。是的,它将在大约5分钟后停止,并且不可预测。很抱歉,我的回答对您的情况没有帮助。我在回答中使用了您的循环过程,因为我认为这是一种很好的方法。谢谢你让我学习你的答案。但是如果你对此有任何问题,请告诉我。我想修改它。
    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);
    }
    
    <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>