web-dev-qa-db-fra.com

Comment boucler la plage de cellules et définir la valeur dans la colonne adjacente

J'apprends les scripts Google Apps à utiliser avec les feuilles de calcul Google.

J'ai une liste d'URL dans une colonne et je veux écrire un script pour obtenir l'élément de titre de chaque URL et l'écrire dans la cellule adjacente. J'ai accompli cela pour une cellule spécifique selon le script suivant:

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

Cela obtient l'URL dans G3, l'analyse, extrait l'élément et écrit la sortie dans H3.

Maintenant que j'ai ce bloc de construction de base, je veux boucler toute la colonne G et écrire la sortie dans la cellule adjacente mais je suis bloqué. Est-ce que quelqu'un peut-il me montrer la bonne direction?

12
needlesslosses

Peut ressembler à ceci:

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