НОВАЯ (БЫСТРЕЕ) ОБРАБОТКА ГРУППЫ ОТВЕТ:
Мой предыдущий ответ (см. Ниже) был написан на скорую руку, чтобы проиллюстрировать, как можно показать или скрыть новые флажки на основе содержимого другой ячейки. Чтобы ускорить процесс, следующий новый скрипт обрабатывает все в массив и не обновляет ячейки, пока все значения не будут вычислены. Это все еще не так быстро, как встроенный ответ на стороне клиента, но он будет обрабатывать сотни или тысячи имен в течение одной или двух секунд (поэтому он идеально подходит для возможности вставки сотен имен без срывов), и я сделал попробуйте использовать "лучшие практики" из этой страницы на developers.google.com .
Предположения:
Шаг 1:
Вы можете пропустить этот шаг, если вы скопировали пример листа
Выделите все соответствующие ячейки в столбце флажков, щелкните их правой кнопкой мыши и выберите «Data Validation
» в меню. Во всплывающем диалоговом окне обязательно выберите «Checkbox
» в разделе «Критерии» и нажмите «Save
».
Шаг 2:
Если вы скопировали лист с примером, этот скрипт уже должен быть привязан к листу, в противном случае: Вставьте и сохраните следующий скрипт в ваш редактор скриптов "Tools > Script Editor
." Примечание. Возможно, вам придется одобрить выполнение сценария в соответствии с разрешениями безопасности Google.
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("New Checkboxes"); //change this to the name of your sheet
ui = SpreadsheetApp.getUi();
//PICK ONE & comment out the other one:
//var names = ss.getRange("names");//Use this if you are naming the range
var names = ss.getRange("B3:B");//Use this if you are naming the ranges
var namesValues = names.getValues(); //Get array of all the names
//PICK ONE & comment out the other one:
//var checkboxes = ss.getRange("checkboxes"); //Use this if you are naming the range
var checkboxes = ss.getRange("A3:A"); //Use this if you want to hard-code your range
var cbRows = checkboxes.getHeight(); //Get # of rows in the ranges
var cbValues = checkboxes.getValues(); //Get array of all the checkbox column cell values
//Logger.log(cbValues);
var newCBValues = new Array(cbRows); //Create an array to store all the new checkboxes values before we edit the actual spreadsheet
for (var row = 0; row < cbRows; row++) {
newCBValues[row] = new Array(0); // Make the array 2 dimensional (even though it only has 1 column, it must be 2D).
if (namesValues[row] == "" || namesValues[row] == " ") { //If the name cell of this row is empty or blank then...
newCBValues[row][0] = " "; //Set the value to one space (which will make the cell NOT true or false, and thus NOT display a checkbox).
//Logger.log("newCBValues[" + row + "][0]: " + newCBValues[row][0]);
}else{ //otherwise, if the name cell isn't blank...
if (cbValues[row][0] === true) {
newCBValues[row][0] = true; //Keep the checkbox checked if it's already checked
}else{ //If the name cell isn't blank, and it's not true...
newCBValues[row][0] = false; //Then Keep it or set it to False (an empty checkbox):
}
}
}
checkboxes.setValues(newCBValues); // now that we have a completed array of our new checkbox values, let's edit the sheet with them!
}
Шаг 3:
Вернитесь в электронную таблицу, вставьте, отредактируйте, удалите или введите несколько имен в столбце имен, чтобы увидеть изменения.
Вот и все!
СТАРЫЙ (МЕДЛЕННЫЙ) ОТВЕТ:
Если вы не возражаете добавить скрипт на свой лист, я выяснил, как использовать «новые» флажки, но отображать их только в том случае, если у вас есть соответствующее Имя в столбце имени. Для моего сценария я сделал именованные диапазоны столбца флажка («флажки») и столбца имен («имена»). Вы также должны создать диапазоны с одинаковыми именами, если вы хотите использовать этот сценарий (или просто жестко закодировать диапазоны в сценарии), что не является хорошим способом, если вы собираетесь часто менять размер диапазона, добавляя и удаление имен. Зайдите в меню Data > Named ranges...
В любом случае, я создал обновленный пример, который вы можете увидеть на этой странице: https://docs.google.com/spreadsheets/d/1MSnQ1_6Sy018lAoehzQ55QVrfJldoKS5EnWjOxYWxIs/edit#gid=1464332245
Вам нужно будет сделать копию этой книги, а затем дать себе разрешение на использование приведенного ниже сценария, как только вы добавите его в свою книгу из меню Tools > Script Editor
:
function onEdit() {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
var names = activeSheet.getRange("names"); //Hard Code the Range here if you don't want to use named ranges (example: "B2:B")
var checkboxes = activeSheet.getRange("checkboxes"); //Hard Code the Range here if you don't want to use named ranges (example: "A2:A")
var namesFirstRow = names.getRow();
var namesLength = names.getLastRow();
var namesCol = names.getColumn();
var checkboxesCol = checkboxes.getColumn();
for (var i=0; i<namesLength; i++) {
var checkCell = activeSheet.getRange(namesFirstRow+i,checkboxesCol);
var nameCell = activeSheet.getRange(namesFirstRow+i,namesCol);
Logger.log(checkCell.getA1Notation() + " " + nameCell.getA1Notation());
if (nameCell == "" || nameCell.isBlank()) { //If There is no name in the name column (it's empty or just blank)
checkCell.setValue(" "); // Make the checkbox column blank so no checkbox appears
}else{
if (checkCell.getValue() === true || checkCell.getValue() === false) {
//Do nothing since a value is already set
//app.getUi().alert(checkCell.getA1Notation() + " is " + checkCell.getValue());
}else{
checkCell.setValue("FALSE"); //Place an empty checkbox (FALSE) if a name value has not been set in the name column
}
}
}
}
Это будет работать только в том случае, если вы убедитесь, что для диапазона «флажки» уже выбрана проверка данных в соответствии с критериями «флажка» ...
Инструкции: для столбца, в котором вам нужны флажки: выделите весь диапазон ячеек в столбце (кроме заголовка), щелкните правой кнопкой мыши выбранный столбец, выберите «Проверка данных», а затем выберите «Флажок» для критерии. Тогда все ваши ячейки «ИСТИНА» и «ЛОЖЬ» будут отмечены или сняты. Кроме того, чтобы интегрировать все именованные диапазоны, которые находятся внутри сценария, убедитесь, что этот диапазон столбца флажка назван «флажки» (согласно инструкциям выше).