在循环中追加行 - Google电子表格

时间:2014-09-12 15:38:04

标签: google-apps-script

我有一个应用程序脚本,它使用YouTube API从YouTube获取视频频道的视频。 YouTube一次只能返回50个结果。

每次获得下一组结果时,如何在电子表格中附加行

我的问题的实质是,如何在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;
}

1 个答案:

答案 0 :(得分:0)

由于您使用单独的函数将数据数组写入工作表,因此这非常简单明了:

请使用getLastRow()方法的结果,而不是使用硬编码的起始行值,请参阅documentation here

如果我们使用getLastRow()+1,则下一个数据块将写在最后一个现有行的正下方。

顺便说一句,我还更改了您的函数中的高度宽度定义,以使其更具&#34;通用&#34; :它从数组维度获取尺寸,以便即使由于某种原因,您更改数组大小,匹配也总是完美的。

代码:

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