如何创建一个无限循环来反复更改Google应用脚本中的单元格值?
function doTest() {
if(x>=360) x = 0;
Utilities.sleep(500);
x = x+1;
SpreadsheetApp.getActiveSheet().getRange('a13').setValue(x);
incr();
}
我希望它增加一个单元格值,直到它达到360,然后从0开始。
答案 0 :(得分:1)
无限循环最终将使您的应用程序崩溃。但是,假设这就是您要的工作,这是一种实现方法:
function iterate() {
var range = SpreadsheetApp.getActiveSheet().getRange('a13');
var i = 0;
while(true) {
range.setValue(i);
SpreadsheetApp.flush();
i = (++i) % 361;
}
}
答案 1 :(得分:1)
如果我的理解是正确的,那么该示例脚本如何?我认为您的情况有几个答案。因此,请仅考虑其中之一。在此示例脚本中,我使用了侧边栏。即,我使用了Javascript和Google Apps Script。我认为可以通过从边栏中运行Google Apps脚本来实现无限循环。我可以确认,在我的环境中,此计数可以运行的时间超过Google Apps脚本最长6分钟的执行时间。
使用此脚本时,请执行以下流程。
run()
的功能。
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>
如果这种方法不是您的目标方向,我表示歉意。
答案 2 :(得分:0)
以下人员可以完成工作!
请注意对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;
}
}