Лист, показывающий доступные часы между всеми - PullRequest
0 голосов
/ 28 октября 2019

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

Пример листа Person1: person1 available sheet example

Соответствующие часы: sheet showing how many matches

Я думаю, что моя идея показывать «совпадения 4 из 5» хороша, потому что оставшийся может попытаться показать и отредактировать его так, чтобы он соответствовал «совпадениям 5 из 5». ». Но любые другие предложения приветствуются.

Ссылка на настоящую электронную таблицу (скопируйте на свой диск, чтобы вы могли редактировать): https://docs.google.com/spreadsheets/d/1yun8uMW2LZUumlm6cy3hqPT-FLQipADSIjLQPNiwXl4/edit?usp=sharing

PS: Было бы неплохо поддержать DST (летнее время) но это не обязательно. Человек, находящийся в DST, отрегулирует его.

1 Ответ

1 голос
/ 28 октября 2019

Предполагая, что все значения вашего часового пояса являются смещениями таблицы соответствия (если в таблице соответствия указано 01:00, а ваш часовой пояс равен -1, ваше местное время будет 00:00), вот некоторый код, который покажет вам тексттак, как вы хотите:

function availablePeople(startTime, dayOfWeek) { //All slots are 1 hour long
  const sheetsNames = ["person1", "person2", "person3", "person4"]; //Edit this to update possibilities
  const dayHeaderRow = 2;
  const startTimeCol = 1;
  const endTimeCol = 2;

  var sheets = SpreadsheetApp.getActive();

  var referenceHourRow = sheets.getSheetByName("match").getRange(dayHeaderRow+1, startTimeCol, 24).getValues().map(function (x) {return x.toString()}).indexOf(startTime.toString());

  var referenceDayCol = sheets.getSheetByName(sheetsNames[0]).getRange(dayHeaderRow, endTimeCol+1, 1, 7).getValues()[0].indexOf(dayOfWeek);

  var availablePeople = 0;

  if (referenceHourRow != -1) {
    for (var i = 0; i<sheetsNames.length; i++) {
      var personSheet = sheets.getSheetByName(sheetsNames[i]);
      var timezone = -personSheet.getRange(1, 4).getValue();

      var thisDayCol = referenceDayCol;
      var thisHourRow = referenceHourRow;

      if (timezone!=0) {
        if (thisHourRow+timezone<0) {
          //Went back a day.
          thisDayCol = (thisDayCol+6)%7;
          thisHourRow = 24-(referenceHourRow-timezone);
        } else if (thisHourRow+timezone>=24) {
          //Went forward a day
          thisDayCol = (thisDayCol+1)%7;
          thisHourRow = (thisHourRow+timezone)%24;
        } else {
          thisHourRow += timezone;
        }
      }

      var cell = personSheet.getRange(dayHeaderRow+1+thisHourRow, endTimeCol+1+thisDayCol);

      if (cell.getValue()=="Available") {
        availablePeople++;
      }
    }
  }

  return availablePeople+" out of "+sheetsNames.length;
}

Вот как использовать эту функцию: =availablePeople(<START TIME>,<DAY OF THE WEEK>).

Чтобы разрешить перетаскивание и автозаполнение, напишите =availablePeople($A3,C$2) в "Понедельник "" 00:00 ", а затем перетащите его по горизонтали и вертикали, чтобы обновить формулу.

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