Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Google apps script 谷歌文档自定义刷新脚本_Google Apps Script_Google Sheets_Calculated Field - Fatal编程技术网

Google apps script 谷歌文档自定义刷新脚本

Google apps script 谷歌文档自定义刷新脚本,google-apps-script,google-sheets,calculated-field,Google Apps Script,Google Sheets,Calculated Field,我正在尝试编写一个脚本,允许我在Google完成计算后立即执行命令(即,我正在尝试向Google文档添加一个脚本,该脚本模仿一些VBA“计算”功能) 脚本的工作原理是将范围转换为字符串,并在该字符串中查找子字符串“Loading…”(或“#VALUE!”或“#N/a”)。“while”循环应该一直休眠,直到在字符串中不再找到不需要的子字符串为止 我使用下面的电子表格作为沙盒,在沙盒中搜索“加载…”时,代码似乎工作正常: 然而,在其他情况下,我有一些单元格的值可能返回为“#VALUE!”或“#N

我正在尝试编写一个脚本,允许我在Google完成计算后立即执行命令(即,我正在尝试向Google文档添加一个脚本,该脚本模仿一些VBA“计算”功能)

脚本的工作原理是将范围转换为字符串,并在该字符串中查找子字符串“Loading…”(或“#VALUE!”或“#N/a”)。“while”循环应该一直休眠,直到在字符串中不再找到不需要的子字符串为止

我使用下面的电子表格作为沙盒,在沙盒中搜索“加载…”时,代码似乎工作正常:

然而,在其他情况下,我有一些单元格的值可能返回为“#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.");
};

您不应该使用while循环来“睡眠”,而应该向文档中添加一个事件处理程序,它捕获更新/刷新事件,然后运行您需要的任何数学/处理

以下是开始阅读事件的好地方:


但是如果您在api文档中搜索eventhandler,您可以快速获得一些示例代码

确认-您是否希望在所有计算完成后运行一些代码?这就是你想要的活动吗?@ArunNagarajan:是的。这正是我要找的。@Henrique:谢谢你花时间。我会记住你的建议。我不知道你的解决方案是否有效(不确定你是否能用range.getValues()获得“Loading…”值——我知道的是你必须更新循环中的值。重复搜索相同的非自动更新值数组不会得到你想要的结果。