迭代Google表格中的选定单元格

时间:2018-05-05 05:15:37

标签: google-sheets-api google-sheets-macros

我想在所有选定行的最后一栏添加文字:

var sh = ss.getActiveSheet(); 
  lCol = sh.getLastColumn()
  var selected_cells=ss.getActiveRangeList()
  var rgs=selected_cells.getRanges();
  for (var i = 0; i < rgs.length; i++) {
    var range=rgs[i];
    var lRow=range.getRow();
    var cell = sh.getRange(lRow,lCol+1,1,1);
    var firstname=sh.getRange(lRow, 2).getValue();
    var lastname=sh.getRange(lRow, 3).getValue();
    var email=sh.getRange(lRow, 8).getValue();
    var link="http://192.168.80.1/d/?email="+email+"&firstname="+firstname+"&lastname="+lastname;
    cell.setFormula("=HYPERLINK(\""+link+"\",\"click\")");
  }

但它只是增加了第一排。 我错过了什么?

1 个答案:

答案 0 :(得分:1)

您希望将=HYPERLINK()放入所选行的最后一列。如果我的理解是正确的,那么这个修改怎么样?我对你的问题很感兴趣。所以我想到了你的问题,因为我认为我想从你的问题中学习。

修改要点:

  • 例如,当您选择&#34; A1&#34;,&#34; B2&#34;的单元格时和&#34; C3&#34;,范围列表在数组中有3个元素。那些是&#34; A1&#34;,&#34; B2&#34;和&#34; C3&#34;。选择&#34; A1&#34;,&#34; A2&#34;的单元格时和&#34; A3&#34;,范围列表在数组中有1个元素。那些是&#34; A1:A3&#34;。
    • 从您的脚本中,我认为这可能是您问题的主要原因。所以我想提出以下流程和修改后的脚本。

流程:

  1. 首先,解析检索到的范围列表。
    • 这样,列表由连续的单元格和单个单元格分隔。
  2. 使用已解析的列表,导入所需的值。
  3. 使用此修改后的脚本时,请运行main()

    修改后的脚本:

    function getFormula(e) {
      var firstname = e[1];
      var lastname = e[2];
      var email = e[7];
      var link = "http://192.168.80.1/d/?email=" + email + "&firstname=" + firstname + "&lastname=" + lastname;
      return "=HYPERLINK(\"" + link + "\",\"click\")";
    }
    
    // Please run this function, when you use this modified script.
    function main() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sh = ss.getActiveSheet();
      var lCol = sh.getLastColumn();
      var selected_cells = ss.getActiveRangeList();
      var rgs = selected_cells.getRanges();
      for (var i = 0; i < rgs.length; i++) {
        var numRows = rgs[i].getNumRows();
        if (numRows > 1) {
          var values = sh.getRange(rgs[i].getRow(), 1, numRows, lCol).getValues();
          var formulas = values.map(function(e) {return [getFormula(e)]});
          sh.getRange(rgs[i].getRow(), lCol + 1, numRows, 1).setFormulas(formulas);
        } else {
          var e = sh.getRange(rgs[i].getRow(), 1, 1, lCol).getValues()[0];
          sh.getRange(rgs[i].getRow(), lCol + 1, 1, 1).setFormula(getFormula(e));
        }
      }
    }
    

    注意:

    • 从您的脚本中,在修改后的脚本中,假设firstnamelastnameemail分别位于B列,C列和H列。如果您想更改此内容,请进行修改。

    如果我误解了你的问题,我很抱歉。