Google文档自定义刷新脚本

时间:2012-11-23 00:11:18

标签: google-apps-script google-sheets calculated-field

我正在尝试编写一个脚本,允许我在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.");
};

1 个答案:

答案 0 :(得分:0)

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

这是开始阅读有关活动的好地方:https://developers.google.com/apps-script/understanding_events

但是如果你在api文件中搜索eventhandler,你可以快速得到一些示例代码......