Вместо того, чтобы листы перепрыгивали через обручи и создавали интерфейс для вставки данных и календарь для его отображения, почему бы не использовать формы и календарь для всего этого?
Что я имею в виду
- Листы как долговременная база данных для информации о грузовиках и расписаний
- Календарь как способ визуализации наличия грузовых автомобилей
- Формы в качестве интерфейса для ввода данных
Настройка
- Файл электронной таблицы с таблицей «Список грузовиков».
- Форма, прикрепленная к ней, которая позволяет пользователям вставлять информацию о грузовикебронирование.
Для выполнения этой работы я ввел некоторые данные из Список грузовых автомобилей :
Затем я связал форму с этим листом и настроил несколько основных вопросов:
Я также изменил настройки форм, чтобы люди могли редактироватьЭто на будущее, это позволит нам добавить информацию в календарь, чтобы связать событие сформа ответа.
Я добавил скрипт в формы, который заполняет первый вопрос данными из наших листов:
function populateForm() {
var form = FormApp.getActiveForm();
var TruckIdQ = form.getItems()[0];
var truckList = SpreadsheetApp.openByUrl("YOUR SHEET URL").getSheetByName("List of Trucks").getDataRange().getValues().map(function (row) { return row[0]});
truckList.shift(); //Remove header
var choices = [];
for (var i=0; i< truckList.length; i++) {
choices.push(TruckIdQ.asListItem().createChoice(truckList[i]));
}
TruckIdQ.asListItem().setChoices(choices);
}
И установите его на запуск при открытии формы:
После этого я вернулся к своим листам и изменил автоматическийЛист ответов должен иметь более понятное имя: «Заказы».
Теперь нам нужно создать общий календарь, чтобы поместить всю эту информацию в него.
Я создал один с именем «Календарь бронирования грузовиков». следующим образом:
Затем я создал новый скриптв формах, отвечающих за заполнение календаря информацией.
function populateCalendar(e) {
var bookingCalendar = CalendarApp.getCalendarById("CALENDAR ID");
var questions = FormApp.getActiveForm().getItems();
var response = e.response.getItemResponses();
var eventDescription = "";
var truckname;
var fromDate, toDate;
var fromTime, toTime;
for (var i=0; i< questions.length; i++) {
eventDescription = eventDescription + questions[i].getTitle() + " : " + response[i].getResponse() + "\n";
switch (i) {
case 0:
//Truck Id
truckname = response[i].getResponse();
break;
case 1:
//From Date
fromDate = response[i].getResponse();
break;
case 2:
//To Date
toDate = response[i].getResponse();
break;
case 3:
//From Time
fromTime = response[i].getResponse();
break;
case 4:
//To Time
toTime = response[i].getResponse();
break;
}
}
var startDateTime = new Date(fromDate + " " + fromTime);
var endDateTime = new Date(toDate + " " + toTime);
var newEvent = bookingCalendar.createEvent("Booking "+truckname, startDateTime, endDateTime, {description:eventDescription});
newEvent.setTag("truck", truckname);
newEvent.setTag("responseId", e.response.getEditResponseUrl());
newEvent.setTag("responseUrl", e.response.getId());
}
И создал для него триггер, например:
Теперь, когда я отправляю это в форму:
я получаю эту запись в моем календаре:
* ** 1092 1093 * Надеюсь, это поможет вам!