Связывание данных из двух листов Google - PullRequest
0 голосов
/ 26 октября 2019

Я хочу связать данные из моего листа Google, которые отслеживают отпуск людей. У меня есть еще один лист, который я затем буду использовать для распечатки, чтобы люди могли легко видеть, кто выключен. Может ли кто-нибудь помочь мне с логикой, чтобы получить данные из диапазона ячеек и вернуть только имя человека?

Я не могу поделиться листами, потому что там связаны с моей компанией, и я не могу поделиться за пределами компании. Я могу поделиться снимком экрана с тем, что я пытаюсь сделать. Любые идеи, которые облегчили бы это, были бы полезны. Также я попытался связать трекер с Календарем Google, где я сделал новый

CalendarChart Код Скриншоты

1 Ответ

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

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

Тестовый лист

Как это работает:

На основе листа ввода формула находит столбец с правильной датой, а затем ищет в этом столбце любые символы v, если найдет какие-либо, то добавит имя к результатам.

Соображения

Числа дня - это объекты даты, отформатированные так, чтобы отображать только дату месяца. Названия Месяца показывают Месяц даты под ними. (просто косметический) Если вместо того, чтобы просто искать v, вы хотите что-то искать (h, p и т. д.), вы можете изменить строку комментария на !="". Однако потребуется дополнительная адаптация для возврата списка, который различает, например, отпуск и полдня.

Код

function test(){
  GETVACATIONS(new Date("2019-01-02"));
}

function GETVACATIONS(date) {
  const inputSheetName = "Input";
  const namesColumns = 1;
  const dateRow = 2;
  const dateStartCol = 8;


  var spreadsheet = SpreadsheetApp.getActive();
  var inputSheet = spreadsheet.getSheetByName(inputSheetName);
  var nameSize = inputSheet.getDataRange().getLastRow()-dateRow;

  date = date.setHours(1,0,0,0); //reset time for uniform search

  var result = [];

  //Find cell that has the correct date.
  var lookupDateRange = inputSheet.getRange(dateRow, dateStartCol, 1, inputSheet.getMaxColumns()-dateStartCol);
  var foundIndex = lookupDateRange.getValues()[0].map(function (x) {return x.setHours(1,0,0,0);}).indexOf(date);
  if (foundIndex!=-1) {
    //match found
    var lookupColumn = dateStartCol+foundIndex;
    var lookupDataRange = inputSheet.getRange(dateRow+1, lookupColumn, nameSize);
    //Collect rows that have data, fetch the usernames on that row.
    for (var r=0; r<lookupDataRange.getValues().length; r++) {
      if (lookupDataRange.getValues()[r][0]==="v") {//Has vacation. Might change to if !="" if you want to register any non empty
        result.push(inputSheet.getRange(dateRow+1+r, namesColumns).getValue());
      }
    }
  }
  return result.sort().toString();
}

Использование

Добавить в ячейкуформула =GETVACATIONS(date), где дата - это Date объект или ссылка на ячейку с одним.

Надеюсь, это поможет!

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