【问题标题】:Google Docs Custom Refresh ScriptGoogle 文档自定义刷新脚本
【发布时间】:2012-11-11 09:04:50
【问题描述】:

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

该脚本通过将范围转换为字符串并在该字符串中查找子字符串“Loading...”(或“#VALUE!”或“#N/A”)来工作。 “while”循环应该休眠,直到在字符串中不再找到不需要的子字符串。

我将以下电子表格用作沙箱,代码在沙箱中似乎可以正常工作,只需搜索“正在加载...”:

https://docs.google.com/spreadsheet/ccc?key=0AkK50_KKCI_pdHJvQXdnTmpiOWM4Rk5PV2k5OUNudVE#gid=0

但是,在其他情况下,我的单元格的值可能返回为“#VALUE!”或“#N/A”,除了 Google 仍在加载/思考/计算之外的原因。有什么办法解决这个问题?

    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.");
};

【问题讨论】:

  • 确认 - 您是否希望在所有计算完成后运行一些代码?那是您正在寻找的活动吗?
  • @ArunNagarajan:是的。这正是我正在寻找的。​​span>
  • @Henrique:感谢您抽出宝贵时间。我会记住你的建议。
  • 我不知道您的解决方案是否有效(不确定您是否可以使用 range.getValues() 获得“正在加载...”值 - 我所知道的是您正在必须更新循环中的值。重复搜索相同的非自动更新值数组不会产生您想要的结果。

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


【解决方案1】:

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

这里是开始阅读事件的好地方:https://developers.google.com/apps-script/understanding_events

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多