Возможность активировать проверку данных в Google Sheets, если ячейка содержит значение - PullRequest
0 голосов
/ 10 апреля 2020

Я разработал сценарий благодаря сообществу, которое почти полностью соответствует моим потребностям.

У меня есть электронная таблица с 2 типами листов (1 лист на сотрудника и 1 лист для архива): когда сотрудник завершил проект, он может архивировать / разархивировать строка через флажок; и эта строка удаляется на лист архива.

Мой сценарий содержит код, который автоматически заполняет Col23 листом владельца при добавлении нового клиента в Col3.

function onEdit(event) {
  // assumes source data in sheet named Elisa-Miriam-Victor
  // target sheet of move to named Archive
  // getColumn with check-boxes is currently set to column 2 or B
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();


  // When a client is mentioned in Col3, fill automatically Col23 or W by the PM name    
  var lastRow = s.getLastRow();
  var col23 = s.getRange(lastRow, 23).getValue();
  if (r.getRow() == lastRow && r.getColumn() == 3 && col23 == ""){
    s.getRange(lastRow, 23).setValue(s.getSheetName());
 }

  // Archive a project with checked box from Archive Sheet
 if((s.getName() == "Miriam"||s.getName() == "Elisa"||s.getName() == "Hanane"||s.getName() == "Sarah"||s.getName() == "Apoorva"||s.getName() == "Victor")&& r.getColumn() == 2 && r.getValue() == true) { // copy past every time a new PM-sheet is added
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  } 
  // Unarchive a project from Archive sheet to respective owner
  else if(s.getName() == "Archive" && r.getColumn() == 2 && r.getValue() == false) {
    var row = r.getRow();
    var nameColumn = 23;
    var name = s.getRange(row, nameColumn).getValue();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName(name);
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);   
}
}

Я хотел бы получить код, подобный этому, для которого цель состоит в том, чтобы сгенерировать флажок из проверки данных в Google Sheets при заполнении Col3 . Я не хочу использовать текст с флажком или без него; Мне нужен флажок для проверки данных , потому что это позволяет сотруднику архивировать / разархивировать.

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 10 апреля 2020

Чтобы включить создание флажков в уже существующий код, измените свой первый оператор if следующим образом:

  if (r.getRow() == lastRow && r.getColumn() == 3 && col23 == ""){
    s.getRange(lastRow, 23).setValue(s.getSheetName());
    var rule = SpreadsheetApp.newDataValidation().requireCheckbox().build()
    s.getRange(lastRow,2).setDataValidation(rule);
  }

Объяснение:

Чтобы установить флажки, вам нужно использовать метод setDataValidation () , построение правила с критериями requireCheckbox ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...