перебирать выбранные ячейки в Google Sheets - PullRequest
0 голосов
/ 05 мая 2018

Я хочу добавить текст в последний столбец всех выбранных строк:

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 голосов
/ 06 мая 2018

Вы хотите поместить =HYPERLINK() в последний столбец выбранных строк. Если мое понимание верно, как насчет этой модификации? Мне был интересен ваш вопрос. Поэтому я подумал о вашей проблеме, потому что подумал, что хотел бы изучить ваш вопрос.

Очки модификации:

  • Например, когда вы выбираете ячейки "A1", "B2" и "C3", список диапазонов имеет 3 элемента в массиве. Это «А1», «В2» и «С3». Когда вы выбираете ячейки «A1», «A2» и «A3», список диапазонов имеет 1 элемент в массиве. Это «А1: А3».
    • Из вашего сценария я подумал, что это может быть основной причиной вашей проблемы. Поэтому я хотел бы предложить следующий поток и модифицированный скрипт.

Поток:

  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, lastname и email находятся в столбце B, столбце C и столбце H соответственно. Если вы хотите изменить это, пожалуйста, измените его.

Если я неправильно понимаю ваш вопрос, извините.

...