从html解析数据获取

时间:2013-01-05 16:16:24

标签: google-apps-script google-sheets

我正试图从联邦储备银行获取一些数据并粘贴到我的电子表格中。

所以这是我的代码

function myFunction() {
var response = UrlFetchApp.fetch("http://research.stlouisfed.org/fred2/data/TWEXMANL.txt");
a=response.getContentText();
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var InputSheet = ss.getSheetByName("Sheet5"); 
InputSheet.getRange("E5:E5").setValue(a); 
}

此代码将所有输出粘贴到E5中。我只想将“日期”和“值”之后的数据粘贴到2列中。

有人可以帮我这个吗?我相信你们这很简单。

感谢。

1 个答案:

答案 0 :(得分:1)

使用一点字符串操作,这变得非常简单:

function myFunction() {
  var response = UrlFetchApp.fetch("http://research.stlouisfed.org/fred2/data/TWEXMANL.txt");
  a=response.getContentText();
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var InputSheet = ss.getSheetByName("Sheet1"); 

  //Slice off the text above the columns
  var allData = a.slice(a.indexOf("DATE         VALUE"));

  //Trim spaces between date and value to just 1 space for splitting
  allData = allData.replace(/ +/g, " ");

  //Split the text so each line is a row
  var splitData = allData.split("\n");

  //For some reason, there is an extra line, so remove it
  splitData.pop();

  //Split each row so data is one column and value is another
  for(var i = 0; i < splitData.length; i += 1) {
    splitData[i] = splitData[i].split(" ");
  }

  //Save to spreadsheet. +4 because you start at E5. Note the change to F on the right.
  InputSheet.getRange("E5:F" + (splitData.length + 4)).setValues(splitData);
}

我首先摘下小小的介绍文字。然后我将字符串拆分为包含数据行的数组。我也将每一行(一个字符串)拆分成一个数组。这给了我一个我可以在底部使用setValues()的数组。因为这不仅仅是一个单元格,我必须具体确定宽度和高度,否则它将失败。

如果您想在那里查看数据,我建议Logger.log(splitData);