我有一个应用程序脚本,它使用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;
}
答案 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);
}