Гугл таблицы. Как в макросе записать замену значений?

0
130

В гугл таблицах есть такая замечательная функция, как «Записать макрос». Макрос – это скрипт, выполняющий, заранее записанные пользователем, действия. Он в точности повторит все ваши этапы работы, что бы в будущем избавить вас от рутины. Но есть проблема, макрос не может записать замену значений. Например, в процессе записи макроса, вы нажали «Правка > Найти и заменить» (Ctrl+H), и в таблице, из столбца «B», удалили все пробелы и слово «Руб». К сожалению эти действия просто не запишутся. Но есть выход, можно записанный выше макрос отредактировать, просто добавив в скрипт замену.

Редактируем записанный макрос

И так, нам нужно, что бы был уже, какой нибудь макрос. Если вам нужна только замена, то просто запишите «пустой» макрос и сохраните, например с названием «example». Далее переходим «Расширения>Макросы>Настроить макросы». Выбираем записанный ранее макрос, нажимаем возле него на 3 точки, далее «Изменить скрипт». Переходим во вкладку «Макросы.gs» и ищем наш скрипт. Он будет иметь вид:

function example() {
  var spreadsheet = SpreadsheetApp.getActive();
// ваши записанные действия, например (переход в ячейку а1 и ее отчистка)   spreadsheet.getRange('A1').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
Далее вставляем код и внедряем в него ваши записанные ранее действия, должно получиться так:
function example() {
  var spreadsheet = SpreadsheetApp.getActive();
  
  // ваши записанные действия например (переход в ячейку а1 и ее отчистка)   
  spreadsheet.getRange('A1').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  
  // Получаем активную таблицу и лист
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // Получаем данные из диапазона B1:B
  var range = sheet.getRange("B1:B" + sheet.getLastRow());
  var values = range.getValues();
  
  // Перебираем все значения в диапазоне и меняем символы "Руб" и пробелы на пустоту "" (регистр не учитывается, если нужно, что бы учитывался, удалите оператор "i" во фрагменте "replace(/Руб/gi, "")")
  for (var i = 0; i < values.length; i++) {
    if (values[i][0]) {
      values[i][0] = values[i][0].replace(/Руб/gi, "").replace(/ /g, "");
    }
  }
  
  // Устанавливаем измененные значения обратно в диапазон
  range.setValues(values);
};
Далее обязательно сохраняем проект и уже можно тестировать.

А что если нужно сделать удаление и замену в разных диапазонах?

Например нужно из колонки «B» удалить из суммы пробелы, а в колонке «C», поменять с «Не оплачено» на «Оплачено».
На этот счет тоже есть код:
function example() {
  var spreadsheet = SpreadsheetApp.getActive();
  
  // ваши записанные действия например (переход в ячейку а1 и ее отчистка)   
    spreadsheet.getRange('A1').activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  
  // Получаем активную таблицу и лист
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // Обрабатываем диапазон B1:B, удаляя символ "пробел"
    var rangeA = sheet.getRange("B1:B" + sheet.getLastRow());
    var valuesA = rangeA.getValues();
    
    for (var i = 0; i < valuesA.length; i++) {
      if (valuesA[i][0]) {
        valuesA[i][0] = valuesA[i][0].replace(/ /g, "");
      }
    }
    rangeA.setValues(valuesA);
    
  // Обрабатываем диапазон C1:C, меняя значение "Не оплачено" на "оплачено"
    var rangeB = sheet.getRange("C1:C" + sheet.getLastRow());
    var valuesB = rangeB.getValues();
    
    for (var i = 0; i < valuesB.length; i++) {
      if (valuesB[i][0]) {
        valuesB[i][0] = valuesB[i][0].replace(/Не оплачено/gi, "оплачено");
      }
    }
  // Вставляем данные обратно в таблицу
    rangeB.setValues(valuesB);
};

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь