Флажки - флажки отдельных отклоненных тестов (английский, математика, Sci) и флажок «Весь экзамен», отмеченные и не отмеченные - PullRequest
1 голос
/ 03 апреля 2019

Мне нужно 4 флажка в одной строке для Google Sheet. Они представляют (3) школьные экзамены отказались. Последний блок - когда всем им отказывают.

2 месяца назад я ничего не знал о VBA, и с тех пор я сделал серию макросов с 6-летним кодированием. Они не красивые, но они работают. Теперь я начинаю с нуля со скрипта приложений или любой другой кодировки, которую вы предлагаете / рекомендуете использовать. Я уверен, что кодирование между ними (VBA и Apps Script) похоже на вас, но они выглядят совершенно по-другому для меня.

У меня нет кода или опыта для этого. Я искал вокруг и нашел (на этом сайте) что-то действительно близкое к тому, что я ищу.

Вот пример, который я нашел:

все флажки должны быть отмечены и сняты с основного флажка

Это для Google Sheet. У меня есть 3 экзамена, которые мои студенты должны сдать - английский, математика и естественные науки, но имеют тенденцию отказываться от них. Они могут отказаться от всех из них, некоторые или нет. Мне нужно 4 флажка - один для каждого отдельного экзамена, от которого они отказываются, и один, если они отказываются от всех них. Если вы отметите все отдельные поля (выполненные за определенный период времени), флажок «Весь экзамен» будет установлен, и отдельные поля станут не отмечены. Если вы сначала отметите флажок «Весь экзамен», то любые проверки, которые могут быть на отдельных полях, станут непроверенными.

Флажки будут находиться в той же строке, но в отдельных ячейках. Английский будет F2, математика будет G2, наука будет H2, а весь экзамен будет I2.

Причина, по которой я не могу установить все флажки отдельных экзаменов и флажок «Полный экзамен», заключается в том, что мне необходимо различать частичные и целые экзамены, которые не были сданы. Мне нужно будет подсчитать количество отдельных экзаменов, которые были отклонены как «Частичные экзамены», а также целые экзамены.

Еще одна вещь, которую я хочу сделать, - это уменьшить количество кликов, чтобы можно было предположить, что для отдельных экзаменов может быть всего 3 поля, и если все они будут отмечены, это будет означать, что весь экзамен был отклонен, то есть 2 дополнительные щелчки мыши. Скорее всего, этот лист будет использоваться во время внезапного потока отказов всего за час до начала экзаменов, поэтому установка флажка «Весь экзамен», если это возможно, будет проще / быстрее, чем установка всех 3 отдельных полей.

Как это работает? Вы присваиваете код самому флажку?

Буду признателен за любые отзывы и помощь. И если у вас есть какие-либо сайты, на которые вы можете направить меня, чтобы начать свое обучение в этом, пожалуйста, поделитесь. Спасибо. Jim

1 Ответ

1 голос
/ 09 апреля 2019

Убедитесь, что у вас есть столбцы Eng, Math, Sci и Full;F, G, H и I соответственно;установлены флажки фактических листов (выберите F2: I, меню → Вставить → флажок).
Simple screenshot showing what the above might look like in Sheets.

Если вы никогда не запускали скрипт Google Apps в электронной таблице,возможно, пройдитесь по приличному учебнику, например, первые несколько разделов этого руководства Бена Коллинза .

После запуска кода попробуйте скрипт, который отслеживает изменения в файле Sheets и отвечает:Ваши необходимые проверки и изменения.

function onEdit(e) {
  // these four 'settings' give the script the checkbox range. UPDATE IF RESTRUCTURING!
  var checkboxRange = {
    left : 6,
    right : 9,
    top : 2,
    bottom : 1000
  };

  // where was the edit performed?
  var editSheet = e.range.getSheet();
  var editRow = e.range.getRow();
  var editCol = e.range.getColumn();

  if(editRow < checkboxRange.top  || editRow > checkboxRange.bottom) {return};
  if(editCol < checkboxRange.left || editCol > checkboxRange.right ) {return};
  Logger.log("User edit was in the checkbox area.");

  if(editCol == checkboxRange.right) {
    Logger.log("User changed an 'Entire Exam' checkbox; seeing if now checked.");
    if(editSheet.getRange(editRow,checkboxRange.right).getValue()) {
      Logger.log("Yes, user checked that 'Entire Exam' checkbox. Clearing Partials.");
      editSheet.getRange(editRow,checkboxRange.left,1,3).uncheck();
    }
  }
  else {
    Logger.log("User changed a 'Partial' checkbox; seeing what's there now:");
    var partials = editSheet.getRange(editRow, checkboxRange.left, 1, 3).getValues();
    Logger.log(partials);
    if(partials[0][0] && partials[0][1] && partials[0][2]) {
      Logger.log("All Partials are checked; clearing Partials and checking Entire.");
      editSheet.getRange(editRow,checkboxRange.right).check();
      editSheet.getRange(editRow,checkboxRange.left,1,3).uncheck();
    }
    else {
      Logger.log("User changed a Partial, but not all true; paranoid unchecking Entire.");
      editSheet.getRange(editRow,checkboxRange.right).uncheck();
    }
  }  

}

Я считаю, что это соответствует вашему описанному желаемому поведению.По-английски это:

  • Проверяет и игнорирует правки вне диапазона F2: I1000.
  • В противном случае проверяет, было ли изменение: «поставлен флажок Весь экзамен»;и если да, снимите флажок Eng, Math, Sci.
  • В противном случае посмотрите, какие флажки у субъекта, и
    • Если все они отмечены сейчас, снимите флажок с них и вместо него отметьте Весь
    • В противном случае они изменили Частичное, но не все верно, поэтому снимите флажок Весь Экзамен для чистоты.

Я положил туда несколько Logger.log() сообщенийвместо комментариев.После внесения изменений в «Лист» вы можете увидеть, что Logger сгенерировал на основе ваших изменений, вернувшись в редактор сценариев и из меню, выбрав «Вид» → «Журналы».Как только вы довольны работой вашего листа и скрипта, вы можете удалить вызовы Logger.

Наконец, предостережение;как только вы добьетесь его работы, попросите других людей, которые будут использовать файл Sheets, сделать несколько тестовых изменений, чтобы увидеть, как он работает, и подтвердить, что ваш сценарий запущен до большого дня - никаких неприятных сюрпризов!

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