1

I want to add a text to last column of all selected rows:

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\")");
  }

But it justs adds to first row. What am I missing?

4

1 回答 1

1

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

修改点:

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

流动 :

  1. 首先,解析检索到的范围列表。
    • 这样,列表被连续单元格和单个单元格分开。
  2. 使用解析列表,导入您想要的值。

当您使用此修改后的脚本时,请运行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));
    }
  }
}

笔记 :

  • firstname从您的脚本中,在修改后的脚本中,它假设lastnameemail分别位于 B 列、C 列和 H 列中。如果你想改变它,请修改它。

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

于 2018-05-06T09:06:30.567 回答