我正在尝试编写一个脚本,允许我在Google完成计算后立即执行命令(即我正在尝试将脚本添加到模仿某些VBA“计算”功能的Google文档中)。
通过将范围转换为字符串并在该字符串中查找子字符串“Loading ...”(或“#VALUE!”或“#N / A”)来构思脚本。 “while”循环应该休眠,直到在字符串中找不到不需要的子字符串。
我正在使用以下电子表格作为沙盒,并且代码似乎在沙盒中正常工作只是搜索“正在加载...”:
https://docs.google.com/spreadsheet/ccc?key=0AkK50_KKCI_pdHJvQXdnTmpiOWM4Rk5PV2k5OUNudVE#gid=0
但是,在其他情况下,我的单元格的值可能会返回为“#VALUE!”或“#N / A”的原因不是谷歌仍在加载/思考/计算。这是怎么回事?
function onEdit() {
Refresh();
};
function Refresh () {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
// set the range wherever you want to make sure loading is done
var range = sheet.getRange('A:A')
var values = range.getValues();
var string = values.toString();
var loading = "Loading";
do
{
var randomWait = Math.floor(Math.random()*100+50);
Utilities.sleep(randomWait);
}
while (string.search(loading) ==! null);
range.copyTo(sheet2.getRange('A1'), {contentsOnly:true});
customMsgBox();
};
function customMsgBox() {
Browser.msgBox("Data refreshed.");
};
答案 0 :(得分:0)
而不是使用while循环来"睡眠"您应该在文档中添加一个事件处理程序,它捕获更新/刷新事件,然后运行您需要的任何数学/处理。
这是开始阅读有关活动的好地方:https://developers.google.com/apps-script/understanding_events
但是如果你在api文件中搜索eventhandler,你可以快速得到一些示例代码......