@Salgerd

Возможно ли сделать рабочий скрипт на сортировку данных в таблице?

Помогите поправить скрипт!

Есть таблица, в которой нужна сортировка по убыванию в столбце E, то есть я буду менять значения, а вся строка должна занимать свое место по порядковому номеру, который находиться в столбце А (он меняться НЕ должен), то есть вся строка от В до Z должна сортироваться.

https://docs.google.com/spreadsheets/d/1iPl4-OEvhU...
function onEdit(e) {
const eventCell = e.range;
if (eventCell.getColumn() == 5 && eventCell.getNumColumns() == 1 && eventCell.getNumRows() == 1 && eventCell.getRow() > 2) {
const sheet = eventCell.getSheet();
const lastRow = sheet.getRange('E3').getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
sheet.getRange(3, 2, lastRow - 2, 13).sort({column: 5, ascending: false});
};//
} // onEdit event


Вот скрипт, но он работает как-то коряво...

А также хотелось бы сделать, чтобы одинаковые значения в столбце D подсвечивались одним цветом!

Помогите, пожалуйста, добрые люди!
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ответы на вопрос 1
stomaks
@stomaks
Разработчик Google Apps Script (stomaks.me)
1) "Скрипт который я указал в вопросе, ругается (TypeError: Cannot read property 'range' of undefined)" все верно, так и должно быть когда вы запускаете скрипт вручную. Переменная e, которую вы передаете в функцию, содержит данные только когда отрабатывает простой триггер onEdit но при ручном запуске этой функции она будет undefined.
Добавьте в начало скрипта такую заглушку (что можно было запускать скрипт вручную):
e = e || {
    range: SpreadsheetApp.getActiveRange()
  };

Но тогда нужна будет авторизация в скрипте.
Используйте установочный триггер на изменение в таблице.

2) У вас рабочий скрипт, что не работает, не могу понять ?

function onEdit(e) {
  e = e || {
    range: SpreadsheetApp.getActiveRange()
  };
  
  const range = e.range;
  
  if (range.getColumn() !== 5)
    return;
  
  if (range.getRow() < 3)
    return;
  
  const sheet = range.getSheet();
  
  const frozen_rows = 2;
  
  const last_row = sheet
  .getRange('E'+(frozen_rows+1))
  .getNextDataCell(SpreadsheetApp.Direction.DOWN)
  .getRow();
  
  sheet
  .getRange(frozen_rows+1, 2, last_row - frozen_rows, 13)
  .sort({column: 5, ascending: false});
}


---
stomaks.me
g-apps-script.com
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы