2014-09-12 53 views
0

我有一個應用程序腳本,它使用YouTube API從YouTube獲取某頻道的視頻。 YouTube一次只能返回50個結果。在循環中附加行 - Google電子表格

我怎麼每次都追加行電子表格中我獲得下一組結果

我的問題的實質是,如何在電子表格中For循環上做一個更新行。

我試過了。 sheet.appendRows(object [])並且不起作用。

任何想法?

我的腳本

function searchbySafety(safety) { 

    var first_response = YouTube.Search.list('id,snippet',{ 
     channelId: 'UCpZG4Vl2tqg5cIfGMocI2Ag' , 
     maxResults: 50, 
     safeSearch: safety 
    }); 

    Create_headers(); 
    for (var i = 0; i < first_response.items.length; i++) { 
     var item = first_response.items[i]; 
     Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title); 
     gen_results(first_response, safety); 
     write_range(data); 
    } 

    var nextPageToken = first_response.nextPageToken; 
    while(nextPageToken != null) { 
     var videoresponse = YouTube.Search.list('id,snippet', { 
     channelId: 'UCpZG4Vl2tqg5cIfGMocI2Ag' , 
     maxResults:50, 
     pageToken: nextPageToken, 
     safeSearch: safety 
     }); 


     for (var i = 0; i < videoresponse.items.length; i++) { 
      var item = videoresponse.items[i]; 
      Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title); 
      //gen_results(videoresponse, safety); 
      //write_rest_data(data); 
     } 
     nextPageToken = videoresponse.nextPageToken; 
    } 

} 

function gen_results(response, safety){ 
    for (var i = 0; i < response.items.length; i ++) 
    { 
    var item = response.items[i]; 

    row = [item.snippet.title, "https://www.youtube.com/watch?v=" + item.id.videoId, safety]; 
    data[i] = row; 
    } 
    return data; 
} 

function write_range(data){ 
    var range = report_sheet.getRange(2,1,50,3); 
    range.setValues(data); 
} 

function Create_headers(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = ss.getSheets(); 
    var sheet = sheets[3]; 
    Logger.log(sheet.getName()); 
    var headers = [ 
    ["Title","URL","Safety"] 
    ]; 
    var range = sheet.getRange("A1:C1"); 
    range.setValues(headers); 
    report_sheet = sheet; 
} 
+0

這主要取決於你如何寫數據到表。你能顯示你腳本的相關部分嗎? – 2014-09-12 15:43:32

+0

我已添加代碼。 – 2014-09-12 15:50:52

+0

謝謝,我用盡可能多的細節回答,並增加了一些小改進。 – 2014-09-12 16:33:59

回答

0

由於您使用的是單獨的功能將數據數組寫入表,這是非常簡單明瞭:

而不是使用硬編碼的起始行值使用結果getLastRow()方法,請參閱documentation here

如果我們使用getLastRow()+1,則下一個數據塊將寫入最後一個現有行的正下方。

順便說一句,我改變也是在你的函數的高度寬度定義,使其更加「通用」:它從數組維度的尺寸,以便在比賽永遠是完美的,即使由於某種原因,你改變了數組的大小。

代碼:

function write_range(data){ 
    var lastRow = report_sheet.getLastRow()+1; 
    var range = report_sheet.getRange(lastRow,1,data.length,data[0].length); 
    range.setValues(data); 
} 
+0

感謝隊友,它的工作原理。我不知道getLastRow()。真的很感謝這一點。 – 2014-09-12 23:37:44

+0

另外我添加了Create_headers()的代碼 – 2014-09-12 23:38:02

+0

實際上來測試它,我想我得到的是一遍又一遍重複的相同視頻。但那是我的問題。我只需要傳遞新的頁面令牌。再次感謝您的幫助。 – 2014-09-12 23:39:10