有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

谷歌表单中数据刷新的java问题

我创建了一个谷歌表单,用以下公式提取Instagram上视频的观看人数:

=REGEXEXTRACT(IMPORTXML("URL"/?hl=en?update=1618016662170","//script[@type='application/ld+json']"),"userInteractionCount"":""(\d+)")

它很挑剔,偶尔也会在正确地抓取数据时出现问题,但总体而言,它工作正常。然后,我使用以下两个函数,让公式的每个实例每分钟自动更新一次:

function createTrigger() {
  ScriptApp.newTrigger("refreshGroupD")
  .timeBased()
  .everyMinutes(1)
  .create()
}
function refreshGroupC() {
  var lock = LockService.getScriptLock();
  if (!lock.tryLock(5000)) return; 

  var id = "ID";
  var ss = SpreadsheetApp.openById(id);
  var sheet = ss.getSheetByName("Sheet");
  var dataRange = sheet.getDataRange();
  var formulas = dataRange.getFormulas();
  var content = "";
  var now = new Date();
  var time = now.getTime();
  var re = /.*[^a-z0-9]import(?:xml|data|feed|html|range)\(.*/gi;
  var re2 = /((\?|&)(update=[0-9]*))/gi;
  var re3 = /(",)/gi;

  for (var row = 0; row < formulas.length; row++) {
    for (var col = 0; col < formulas[0].length; col++) {
      content = formulas[row][col];
      if (content != "") {
        var match = content.search(re);
        if (match !== -1) {
          // import function is used in this cell
          var updatedContent = content.toString().replace(re2, "$2update=" +
            time);
          if (updatedContent == content) {
            // No querystring exists yet in url
            updatedContent = content.toString().replace(re3, "?update=" + time +
              "$1");
          }
          // Update url in formula with querystring param
          sheet.getRange(row + 1, col + 1).setFormula(updatedContent);
        }
      }
    }
  }

  // Done refresh; release the lock.
  lock.releaseLock();

  // Show last updated time on sheet somewhere
  sheet.getRange(32, 2).setValue("Refreshed at " +
    now.toLocaleTimeString())
}

我的问题是,最终,每个单元格都会给出一个无限的“错误:加载数据”。目前,我只有16个细胞充满了这个公式,但随着时间的推移,我将有近600个这样的细胞。对于我的工作表最终无法刷新数据的原因,是否有任何解决方案,或者是否有一种可能不会对文件造成太大负担的更干净的解决方案?任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    注意应用程序脚本中有quota limits

    这意味着,例如,你每天最多有Triggers total runtime,这取决于你的账户

    如果您有消费者帐户,则限制为90分钟/天,即每次脚本执行3.75秒

    每个脚本执行需要多长时间?如果超过3秒,您将遇到配额问题

    解决办法是要么

    • 减少执行基于时间的触发器的频率
    • 升级到一个Google Workspace帐户,这会给你一个更高的执行限制

    需要考虑的另一点:

    更新公式(sheet.getRange(row + 1, col + 1).setFormula(updatedContent);)的请求可能需要更长的时间才能执行。更新公式时,不应尝试访问表格内容