Я создаю пользовательскую функцию, которая извлекает список имен для каждого дня на основе ввода отпуска.
Как это работает:
На основе листа ввода формула находит столбец с правильной датой, а затем ищет в этом столбце любые символы 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
объект или ссылка на ячейку с одним.
Надеюсь, это поможет!