#javascript #google-apps-script #google-sheets
#javascript #google-приложения-скрипт #google-таблицы
Вопрос:
Я хотел бы внедрить в свой лист скрипт, который проверяет, является ли значение в ячейке ИСТИННЫМ или ЛОЖНЫМ, и до тех пор, пока это ВЕРНО, указанный диапазон будет автоматически сортироваться при каждом изменении ячейки на листе. Кроме того, я хотел бы иметь возможность решить, будет ли диапазон отсортирован по возрастанию или по убыванию через выпадающее меню.
Что касается части «автоматическая сортировка», я нашел этот фрагмент кода:
function onEdit(event){
var sheet = event.source.getActiveSheet();
var editedCell = sheet.getActiveCell();
var columnToSortBy = 4;
var tableRange = "B3:E9";
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy } );
}
}
Это работает просто отлично.
Теперь я попытался добавить свои условия следующим образом, и это перестало работать.
Можете ли вы помочь мне понять, что здесь не так?
function onEdit(event) {
var sortCheck = "G21"; // This cell contains a check box
if(sortCheck == "TRUE"){ // so its value is either TRUE or FALSE
var sheet = event.source.getActiveSheet();
var editedCell = sheet.getActiveCell();
var columnToSortBy = 4;
var tableRange = "B3:M18";
var sortOrder = "G22"; // This cell contains the drop-down menu
// where the user chooses "ascending" or "descending"
if(sortOrder == "descending"){
var sortOrder = false
} else if(sortOrder == "ascending"){
var sortOrder = true
}
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy,ascending: sortOrder } );
}
}
Комментарии:
1. Привет! Я опубликовал свой ответ. Дайте мне знать, сработало ли это для вас.
Ответ №1:
Объяснение:
В вашем коде вы используете это выражение, которое всегда будет принимать значение false:
var sortCheck = "G21";
if(sortCheck == "TRUE"){code}
Причина в том, что «G21» никогда не будет равнозначно «TRUE».
Чтобы получить значение этой ячейки, просто вызовите:
var sortCheck = "G21"; // This cell contains a check box
var sortCheckValue = sheet.getRange(sortCheck).getValue();
То же самое справедливо для sortOrder
.
Решение:
function onEdit(event) {
var sheet = event.source.getActiveSheet();
var sortCheck = "G21"; // This cell contains a check box
var sortCheckValue = sheet.getRange(sortCheck).getValue();
var columnToSortBy = 4;
var tableRange = "B3:M18";
var sortOrder = "G22";
var sortOrderValue = sheet.getRange(sortOrder).getValue(); // sort order value
if(sortCheckValue == true){ // so its value is either TRUE or FALSE
if(sortOrderValue == "descending"){
var sortOrderB = false;
} else if(sortOrderValue == "ascending"){
var sortOrderB = true;
}
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy,ascending: sortOrderB } );
}
}
Комментарии:
1. Я вижу! <br/> Итак, что я в основном сделал, это присвоил строку «G21» переменной sortCheck и то же самое для «G22» соответственно, но мне пришлось использовать класс getRange для достижения моей цели.<br/> Я также отметил ваше исправление к переменной sortOrderB , поскольку я, очевидно, использовал ее дважды в одной и той же функции. Это было довольно глупо.<br/> Единственное, что я сделал по-другому для своей цели, это то, что он вообще не должен сортировать, если флажок равен false:<br/>
var sortCheckValue = sheet.getRange(sortCheck).getValue(); if(sortCheckValue == true){ var columnToSortBy = 4;