Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Перебирать выбранные ячейки в Google Sheets

Автор вопроса: AVEbrahimiОтветов: 1

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

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

Но это просто добавляет к первой строке. Что мне не хватает?

  • Благодарю за ваш ответ. Я мог бы изучить ваш вопрос. И тебе спасибо. Tanaike 11.05.2018

google-apps-scriptgoogle-sheets-apigoogle-sheets-macros

Ответы

Ответ 1 · рейтинг 1 · Tanaike

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

Точки модификации

  • For example, when you select the cells of "A1", "B2" and "C3", the range list has 3 elements in an array. Those are "A1", "B2" and "C3". When you select the cells of "A1", "A2" and "A3", the range list has 1 element in an array. Those are "A1:A3".
    • From your script, I thought that this may be the main cause for your issue. So I would like to propose the following flow and the modified script.

Поток

  1. At first, parse the retrieved range list.
    • By this, the list is separated by the continuous cells and the individual cell.
  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 соответственно. Если вы хотите изменить это, пожалуйста, измените его.

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы