手动运行时,Google Apps脚本功能可以运行,但作为触发器运行时,则无法运行

时间:2019-08-07 07:09:10

标签: google-apps-script google-sheets

我有两个脚本:

  • 一个从bradjasper添加IMPORTJSON工作表功能的工具效果很好。

  • 第二个是我想自动刷新脚本,这不起作用。当我手动运行脚本时,该脚本可以工作,并且触发器也可以根据日志进行工作,但不会刷新数据。

我尝试了所有不同的脚本,它们都可以工作,但是实际上未更新工作表上导入的数据。

function RefreshImports() {
  var lock = LockService.getScriptLock();
  if (!lock.tryLock(5000)) return;             // Wait up to 5s for previous refresh to end.

  var id = "1Vt-rqQZ7iXsui8Nrr2XABusd4lUbGqxj4HkzsRkZFNA";
  var ss = SpreadsheetApp.openById(id);
  var sheet = ss.getSheetByName("Blad2");
  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|json|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(1,1).setValue("Rates were last updated at " + now.toLocaleTimeString())
}

此脚本确实运行,因为日志中没有错误。但是,表格上显示的数据不会更改以反映API / JSON文件中的当前信息。

0 个答案:

没有答案