setValue () для нескольких ячеек - PullRequest
1 голос
/ 18 февраля 2020

Я использую приведенную ниже функцию, чтобы объединить значение ячейки в Google Sheets, и гиперссылку, чтобы создать функцию HYPERLINK() в моей системе хранения.

    function setCustomLink(){
      var ss = SpreadsheetApp.getActive().getActiveSheet();
      var cell = ss.getActiveCell();
      var cellValue = cell.getValue();
      cell.setValue('=HYPERLINK("https://projudi.tjpr.jus.br/projudi/processo/buscaProcesso.do?actionType=pesquisaSimples&-H&Host:&projudi.tjpr.jus.br&-H&User-Agent:&Mozilla/5.0&(Windows&NT&6.3;&WOW64;&rv:49.0)&Gecko/20100101&Firefox/49.0&-H&Accept:&text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&-H&Accept-Language:&pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3&--compressed&-H&Referer:&https://projudi.tjpr.jus.br/projudi/processo/buscaProcesso.do?actionType=iniciarSimples&-H&Cookie:&projudiContCookie=0;&JSESSIONID=053165f8dd5f8532c326f3eb06d7;&projudi-route=4;&dtLatC=54;&dtPC=-;&dtCookie=49542FA50EF89B032E8685F08394F120|UHJvanVkaSstK0V4dGVybm98MQ&-H&Connection:&keep-alive&-H&Upgrade-Insecure-Requests:&1&--data&page=1&flagNumeroUnico=true&flagNumeroFisicoAntigo=false&numeroProcesso='
      + cellValue + '";"' + cellValue+'")');
    }

Работает просто отлично. Единственная проблема заключается в том, что я должен выполнить функцию один за другим, и это занимает много времени. Обычно они у меня в строке (А2: А):

example

Есть ли способ выбрать всю строку и запустить функцию один раз? Я пытался использовать .foreach(function(r){return r[0]})*, но по какой-то причине никогда не мог сделать это правильно. Спасибо!

(К вашему сведению: контент на португальском языке, и эта функция позволяет мне увидеть статус иска, связав его номер с гиперссылкой инструмента поиска).

* Вот функция, которую я пытался выполнить , это возвращается как "ноль". Я тоже попробовал range.forEach(function(r), но не повезло.

function myFunction() {
  var ss = SpreadsheetApp.getActive().getActiveSheet();
  var range = ss.getActiveRange().getValues();
  var value = range.forEach(function(r){ 
    '=HYPERLINK("https://projudi.tjpr.jus.br/projudi/processo/buscaProcesso.do?actionType=pesquisaSimples&-H&Host:&projudi.tjpr.jus.br&-H&User-Agent:&Mozilla/5.0&(Windows&NT&6.3;&WOW64;&rv:49.0)&Gecko/20100101&Firefox/49.0&-H&Accept:&text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&-H&Accept-Language:&pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3&--compressed&-H&Referer:&https://projudi.tjpr.jus.br/projudi/processo/buscaProcesso.do?actionType=iniciarSimples&-H&Cookie:&projudiContCookie=0;&JSESSIONID=053165f8dd5f8532c326f3eb06d7;&projudi-route=4;&dtLatC=54;&dtPC=-;&dtCookie=49542FA50EF89B032E8685F08394F120|UHJvanVkaSstK0V4dGVybm98MQ&-H&Connection:&keep-alive&-H&Upgrade-Insecure-Requests:&1&--data&page=1&flagNumeroUnico=true&flagNumeroFisicoAntigo=false&numeroProcesso=' + r[0] + '";"' + r[0]+'")'
  });
  range.setValue(value);
}

1 Ответ

2 голосов
/ 19 февраля 2020

Если вы используете getActiveCell(), ваш рабочий процесс выглядит следующим образом:

  1. выберите ячейку
  2. выполните функцию для обновления этой отдельной ячейки

Чтобы использовать один и тот же рабочий процесс при выборе нескольких ячеек, вы хотите использовать Spreadsheet.getActiveRangeList() метод . Это позволит вам взаимодействовать со списком всех выбранных в данный момент диапазонов. Это будет работать во всех следующих случаях:

  • выбор отдельной ячейки
  • выбор диапазона смежных ячеек
  • выбор нескольких диапазонов смежных ячеек (т.е. использование CTRL + щелчок левой кнопкой мыши)
// Use a global constant to ease editing the value should the URL need to be changed.
var URL_PREFIX = 'http://url/?param1=value1&param2=';

function setCustomLinks() {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var ranges = activeSheet.getActiveRangeList().getRanges();

  // Loop through the ranges.
  for (var i = 0; i < ranges.length; i++) {

    // Get all cell values of the range into a 2D array.
    var values = ranges[i].getValues();

    // Loop through the 2D array of values.
    for (var j = 0; j < values.length; j++) {
      for (var k = 0; k < values[j].length; k++) {

        // Replace each value with a hyperlink formula.
        values[j][k] = createCustomLink(values[j][k]);
      }
    }

    // Set the cell values using the new values.
    ranges[i].setValues(values);
  }
}

function createCustomLink(value) {
  var url = URL_PREFIX + value;
  return '=HYPERLINK("' + url + '", "' + value + '")';
}

Еще одним преимуществом этого подхода является использование пакетных операций для получения / установки каждого диапазона значений в одном вызове метода. Это делает его намного быстрее при работе с большим диапазоном и является одной из документированных лучших практик .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...