2013-01-05 169 views
0

我試圖從美國聯邦儲備獲取一些數據並粘貼到我的電子表格中。從html中解析數​​據獲取

因此,這裏是我的代碼

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

使用一個小的字符串操作,這變得非常容易:

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);

+1

哦,如果你不想在日期/值行,因爲你有自己的頭,加上'splitData = splitData.slice(1)'在彈出之前或之後。這將刪除第一行。 – Fred

+0

嘿弗雷德裏克。感謝您的幫助!我會試試看!我很興奮。新年快樂! – jason

+0

嗨弗雷德裏克。我還有一個問題。我現在正在做其他事情,不需要粘貼到電子表格中,但我需要進一步拆分數組。我正在考慮像a = splitData [i] .split(「」).split(「,」),但這不起作用。我希望能夠解決像splitData [0] [3]這樣的每個元素。現在只能給我第一個元素的第四個字符 – jason