【问题标题】:ImportXML with Google Sheet and Auto Refresh Every MinuteImportXML 与谷歌工作表和每分钟自动刷新
【发布时间】:2020-03-13 14:11:54
【问题描述】:

我有下面的脚本,它在名为价格的谷歌表中导入一些 XML 数据。一切正常,只是我设置了一个时间驱动的触发器,每分钟运行一次,但数据不会更新。

  • 触发器似乎工作正常,因为我可以看到上次运行时间每分钟更新一次。
  • 调用 XML 数据的脚本运行良好,因为我可以看到数据被填充到电子表格中。
  • XML 提要也可以正常工作,因为我可以看到时间每分钟更新一次,还有一个 cron 作业。
  • 我只有这个功能作为一个项目。

    function getData() {
      var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("prices");
      var queryString = Math.random();
      var cellFunction = '=ImportXML("http://myxmldata.com/data-xml.php","//data/date")';
      sheetName.getRange('A2').setValue(cellFunction);
    } 
    

    那怎么了?

【问题讨论】:

  • 感谢您的回复。我很高兴你的问题得到了解决。从您的回复中,我可以理解我的回答并没有解决您的问题。所以我必须删除我的答案。因为我不想混淆其他用户。这是因为我的技术不好。我对此深表歉意。顺便说一句,您可以将答案发布为答案吗?这样,它对遇到相同问题的其他用户很有用。

标签: google-apps-script google-sheets google-sheets-importxml


【解决方案1】:

这是我解决问题的方法:

在您的电子表格上,转到顶部菜单 > 点击工具 > 然后点击脚本编辑器并添加以下脚本:

这是调用数据的脚本,例如XML。请使用您自己的信息更新脚本。 YOUR-SHEET-NAME,是选项卡名称,例如“价格”。

function getData() {
  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("YOUR- 
  SHEET-NAME");
  var queryString = Math.random();
  var cellFunction = '=ImportXML("https://yoururl-xml.php","//trade/price")';  

  var range = sheetName.getRange('A2');

  range.clearContent();  // You can also use range.setFormula("");
  SpreadsheetApp.flush();
  range.setFormula(cellFunction);
  }

在该脚本下方,添加以下脚本,此页面上的更多信息:Periodically refresh IMPORTXML() spreadsheet function

YOUR-SHEET-ID 是电子表格网址中的长数字,例如1YTB12xSTMSNdoT_S1U67MtOUDTf6n4OL2tJLnTNAXYZ

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

  var id = "YOUR-SHEET-ID";
  var ss = SpreadsheetApp.openById(id);
  var sheet = ss.getSheetByName("YOUR-SHEET-NAME");
  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();

}

这是两个脚本的截图:

然后添加计时器,进入顶部菜单点击时钟并添加触发器。确保选择正确的函数,即 RefreshImports。

完成!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多