【问题标题】:How to loop range of cells and set value in adjacent column如何循环单元格范围并在相邻列中设置值
【发布时间】:2013-03-25 13:45:55
【问题描述】:

我正在学习用于 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 列并将输出写入相邻的单元格,但我被卡住了。谁能指出我正确的方向?

【问题讨论】:

    标签: loops google-apps-script google-sheets


    【解决方案1】:

    可能看起来像这样:

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

    【讨论】:

    • 谢谢 Bryan,这非常优雅。请问,您在此解决方案中使用数组并推送。性能方面,如果您有很多行,这有什么特别的优势吗?非常感谢您抽出宝贵时间发布此内容!
    • 优于什么​​替代方案?我推送到 2 个数组 b/c 我不知道您是否需要只返回 1 (titleList) 而没有空值。
    • 优于循环并在每个值可用时推送它。我的(不是很漂亮)代码要慢得多,所以回答了我的问题。再次感谢!
    • 是的,对每一行使用 setValue() 是不可行的。
    • @Bryan P 如果我想为 url 列运行 =httpresponse 如何将状态写入相邻列“H”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多