在时间触发器上调用单元格中的内置函数(Google Spreadsheets Script)?

问题描述 投票:1回答:1

我使用Google表格作为“中间人”来从RSS Feed中获取和保存值。使用= ImportFeed时,打开工作表时,RSS工具中的值将在工作表中更新。这会将值插入单元格A1:E1。

sheet1, cell A1 contains:
=ImportFeed("http://lorem-rss.herokuapp.com/feed", "items" , FALSE, 1)

但在我的设置中,将不会有用户主动打开工作表。相反,我需要这个功能在计时器上运行,例如每隔一小时。我在工作表的脚本编辑器中尝试了以下内容,但当然它不会运行。

function fetchRSS() {
  var response = 
    ImportFeed("https://www.nasa.gov/rss/dyn/breaking_news.rss", "items" , FALSE, 1);
    var sheet = SpreadsheetApp.getActiveSheet();
    sheet.getRange(1,1).setValue([response]);
}

理想情况下,可以使用everyHours(n)或通过UI Trigger方法调用上述函数。

javascript google-apps-script google-sheets
1个回答
1
投票
  • 您想使用Google Apps脚本实现=IMPORTFEED("https://www.nasa.gov/rss/dyn/breaking_news.rss", "items" , FALSE, 1)
  • 您希望将检索到的值放在活动电子表格中的工作表中。

如果我对你的问题的理解是正确的,那么这个修改怎么样?

Modification points:

  • Google Apps脚本中没有ImportFeed()的方法。 为了实现=IMPORTFEED(),我使用了以下流程。 使用https://www.nasa.gov/rss/dyn/breaking_news.rssUrlFetchApp.fetch()中检索值。 使用XmlService.parse()解析检索到的值。 将值放到电子表格中。

Modified script:

使用此脚本时,请将以下脚本复制并粘贴到脚本编辑器中,然后运行fetchRSS()

// In the case of this function, if "n" is 1, the 1st item is retrieved.
function ImportFeed(url, n) {
  var res = UrlFetchApp.fetch(url).getContentText();
  var xml = XmlService.parse(res);
  var item = xml.getRootElement().getChild("channel").getChildren("item")[n - 1].getChildren();
  var values = item.reduce(function(obj, e) {
    obj[e.getName()] = e.getValue();
    return obj;
  }, {});
  return [[values.title, values.link, values.pubDate, values.description]];
}

// Please run this function.
function fetchRSS() {
  var response = ImportFeed("https://www.nasa.gov/rss/dyn/breaking_news.rss", 1);
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(sheet.getLastRow() + 1, 1, response.length, response[0].length).setValues(response);
}

Note:

  • 此脚本假设您使用Spreadsheet的容器​​绑定脚本。
  • 使用时间触发器运行fetchRSS()时,值将写入电子表格第一张表的最后一行。如果要将值放在电子表格中的特定工作表中,请从var sheet = SpreadsheetApp.getActiveSheet()修改为var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name)
  • 在这个修改过的脚本中,如果要使用其他URL,当xml的结构和子元素节点的名称与https://www.nasa.gov/rss/dyn/breaking_news.rss不同时,需要修改ImportFeed()

References:

如果我误解了你的问题,请告诉我。我想修改它。

© www.soinside.com 2019 - 2024. All rights reserved.