Я пытаюсь создать электронную таблицу, которая сортирует список заданий по дате их выполнения, просто установив флажок и пометив его как true. Я очень новичок в JavaScript и использовании электронных таблиц, но у меня есть некоторый опыт программирования, в основном Java и Python.

Мой код пока таков. Флажок находится в левом верхнем углу (ячейка A1), и у меня есть даты в столбце C (столбец 3). Там много неиспользуемых переменных и других лишних вещей, потому что я скопировал некоторые строки из других мест и постов. На данный момент он ничего не делает, когда я нажимаю флажок. Не знаю, что делает половина этого, поэтому любые советы приветствуются. Только не жарь меня слишком сильно, плз, ха-ха

function SortbyCheck(input) {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];
 var range = sheet.getRange("A3:E");
 const DateRange = [A3:E]

 // Sorts by the values in the second column (B)
 //range.sort(3);
  if(s.getName() == "Sheet1" && r.getColumn() == 1 && r.getRow() == 1 && r.getValue() == true) {
 // Sorts descending by column B
    DateRange.sort(3);
  }
}
-1
Dallin Platt 27 Ноя 2022 в 06:05
Объявленные вами переменные даже не совпадают с теми, которые вы используете в условиях if, это не проблема Js или электронных таблиц, вы уверены, что у вас есть опыт программирования?
 – 
Ping
27 Ноя 2022 в 06:37
Чтобы заставить электронную таблицу что-то делать, когда вы меняете статус флажка, вам нужна либо простая функция триггера, либо устанавливаемая функция триггера в скрипте приложений (developers.google.com/apps-script/guides/triggers), но чтобы это заработало, вам нужно сначала понять, как работает apps-script.
 – 
Ping
27 Ноя 2022 в 06:46

3 ответа

Даллин, вот она, модифицированная функция. Вы должны установить устанавливаемый триггер, как указано в Ping, или вы должны назвать свою функцию onEdit. Здесь у вас есть образец того, что, как я понимаю, вам нужно:

function onEdit(e) {
 var eran = e.range
 var sheet = eran.getSheet()
 var sortingrange = sheet.getRange("A3:E");
 
 if(sheet.getName() == "Sheet1" && eran.getColumn() == 1 && eran.getRow() == 1 && eran.getValue() == true) {
   sortingrange.sort({column: 2, ascending: false}) //sorting by B descending
   eran.setValue(false) //unticks the checkbox
  }

}
0
Martín 27 Ноя 2022 в 06:51

Альтернатива флажку...

Вставьте прозрачные рисунки поверх заголовков столбцов, чтобы использовать их в качестве кнопок для активации скрипта сортировки:

image 1

image 2

function sortDatePUlog() {
  var shPUlog = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PU Log');
  shPUlog.getRange("B3:F3").setFontColor('#ffffff');
  shPUlog.getRange("A3").setFontColor('#f388f3');
  shPUlog.sort(1, false); //false puts newest date on top
}

function sortCustNamePUlog() {
  var shPUlog = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PU Log');
  shPUlog.getRange("B3:F3").setFontColor('#ffffff');
  shPUlog.getRange("C3").setFontColor('#f388f3');
  shPUlog.sort(3, true);
}
0
J M 27 Ноя 2022 в 14:17
function onEdit(e) {
 var sh = e.range.getSheet()
 if(sheet.getName() == "Sheet1" && e.range.columnStart == 1 && e.range.rowStart == 1 && e.value == "TRUE") {
   sh.getRange("A3:E" + sh.getLastRow()).sort({column: 2, ascending: false}); 
   e.range.setValue("FALSE");
  }
}
0
Cooper 27 Ноя 2022 в 18:45