web-dev-qa-db-ja.com

セルの範囲をループし、隣接する列に値を設定する方法

Googleスプレッドシートで使用するGoogle Appsスクリプトを学んでいます。

1つの列にURLのリストがあり、各URLからタイトル要素を取得し、隣接するセルにそれを書き込むスクリプトを作成します。次のスクリプトに従って、1つの特定のセルに対してこれを達成しました。

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列全体をループし、出力を隣接するセルに書き込みたいのですが、スタックしています。誰かが私を正しい方向に向けることができますか?

12
needlesslosses

次のようになります。

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; 
}
24
Bryan P