12

我正在学习与 Google 电子表格一起使用的 Google Apps 脚本。

我在一列中有一个 URL 列表,我想编写一个脚本来从每个 URL 获取标题元素并将其写入相邻的单元格。我已经按照以下脚本为一个特定的单元格完成了此操作:

function getTitles() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("url_list");
  var range = sheet.getRange("G3");
  var url = range.getValue();

  var response = UrlFetchApp.fetch(url);
  var doc = Xml.parse(response.getContentText(),true);
  var title = doc.html.head.title.getText();
  var output = sheet.getRange("H3").setValue(title);

  Logger.log(title);
  return title;
}

这会在 G3 中获取 URL,对其进行解析,提取元素并将输出写入 H3。

现在我有了这个基本的构建块,我想循环整个 G 列并将输出写入相邻的单元格,但我被卡住了。谁能指出我正确的方向?

4

1 回答 1

25

可能看起来像这样:

function getTitles() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("url_list");
  var urls = sheet.getRange("G3:G").getValues();
  var titleList = [], newValues = [],
      response, doc, title;

  for (var row = 0, var len = urls.length; row < len; row++) {
    if (urls[row] != '') {
      response = UrlFetchApp.fetch(urls[row]);
      doc = Xml.parse(response.getContentText(),true);
      title = doc.html.head.title.getText();
      newValues.push([title]);  
      titleList.push(title);  
      Logger.log(title);
    } else newValues.push([]);
  }

  Logger.log('newValues ' + newValues);
  Logger.log('titleList ' + titleList);

  // SET NEW COLUMN VALUES ALL AT ONCE!
  sheet.getRange("H3").offset(0, 0, newValues.length).setValues(newValues);
  return titleList; 
}
于 2013-03-25T14:38:06.523 回答