Javascript 在Google Sheets中创建处理RSS提要的函数

Javascript 在Google Sheets中创建处理RSS提要的函数,javascript,xml,google-apps-script,google-sheets,rss,Javascript,Xml,Google Apps Script,Google Sheets,Rss,我正在尝试创建一个功能,我可以导入到谷歌表单,查看这个网站的最新账单。我遇到的一个问题是,当我只创建一个要附加到Google工作表的变量时,该代码将起作用并附加第一个单元格。但是,当我使用相同的逻辑创建多个变量时,但是对于这个链接所指向的xml文件的不同部分,即使我为原始文档和root:TypeError:Cannot read属性“getValue”为null创建了完全不同的变量,也会出现此错误。有没有人能告诉我我做错了什么,这样我至少可以得到它,通过解决这个错误,所有这些项目都可以附加到谷歌

我正在尝试创建一个功能,我可以导入到谷歌表单,查看这个网站的最新账单。我遇到的一个问题是,当我只创建一个要附加到Google工作表的变量时,该代码将起作用并附加第一个单元格。但是,当我使用相同的逻辑创建多个变量时,但是对于这个链接所指向的xml文件的不同部分,即使我为原始文档和root:TypeError:Cannot read属性“getValue”为null创建了完全不同的变量,也会出现此错误。有没有人能告诉我我做错了什么,这样我至少可以得到它,通过解决这个错误,所有这些项目都可以附加到谷歌工作表中,并告诉我一种方法来循环得到所有这些项目

function getData() {
//get the data from boardgamegeek
var url = 'https://legis.delaware.gov/rss/RssFeeds/IntroducedLegislation';
var xmlrss = UrlFetchApp.fetch(url).getContentText();

var document = XmlService.parse(xmlrss);
var root = document.getRootElement();

//Clear out existing content

var sheet = SpreadsheetApp.getActiveSheet();
var rangesAddressesList = ['A:F'];
sheet.getRangeList(rangesAddressesList).clearContent();

//set variables to data from rss feed
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var title = root.getChild('channel').getChild('item').getChild('title').getText();
var session = root.getChild('channel').getChild('item').getChild('derss:legislativeSession').getText();
var link = root.getChild('channel').getChild('item').getChild('link').getText();
var category = root.getChild('channel').getChild('item').getChild('category').getText();
var description = root.getChild('channel').getChild('item').getChild('description').getText();
var pubDate = root.getChild('channel').getChild('item').getChild('pubDate').getText();

sheet.appendRow(["Session", "Title", "Category", "Pub Date", "Description", "Link"]);
sheet.appendRow([session, title, category, pubDate, description, link]);
}

我相信你的目标如下

  • 您希望使用Google Apps脚本按顺序检索立法会话、标题、类别、发布日期、描述、链接的值
  • 您希望将检索到的值放入Google电子表格
修改点:
  • derss:legivatesession
    的情况下,
    derss
    是名称空间。因此,在本例中,需要使用名称空间
  • 当我看到您的XML数据时,有许多
    item
    标记。但在您的脚本中,第1个
    正在尝试检索
  • 当从所有
    中检索值时,当在循环中使用
    appendRow
    时,过程成本将变得很高
当上述各点反映到脚本中时,它将变成如下所示

修改脚本:
  • 在这个修改后的脚本中,它假定活动工作表是第一个工作表。如果您的实际情况不同,请修改以上脚本
参考资料:
function getData() {
  var url = 'https://legis.delaware.gov/rss/RssFeeds/IntroducedLegislation';
  var xmlrss = UrlFetchApp.fetch(url).getContentText();

  // Set the object for retrieving values in order.
  var retrieveNames = {legislativeSession: "Session", title: "Title", category: "Category", pubDate: "PubDate", description: "Description", link: "Link"};

  // Parse XML data.
  var document = XmlService.parse(xmlrss);
  var root = document.getRootElement();
  
  // Retrieve itmes.
  var item = root.getChild('channel').getChildren("item");

  // Retrieve name space of "derss".
  var derssNs = root.getChild('channel').getNamespace("derss");

  // By retrieving values from each item, create an array for putting values to Spreadsheet.
  var values = item.reduce((ar, e) => ar.concat(
    [Object.keys(retrieveNames).map(k => e.getChild(...(k == "legislativeSession" ? [k, derssNs] : [k])).getText())]
  ), [Object.values(retrieveNames)]);

  // Put the created array to Spreadsheet.
  var sheet = SpreadsheetApp.getActiveSheet();
  var rangesAddressesList = ['A:F'];
  sheet.getRangeList(rangesAddressesList).clearContent();
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}