0

В моей таблице на Google Apps, у меня есть несколько столбцов: первая является row[0] для даты заезда, вторым является row[1] для даты выезда ... и так далее до row[17]. Моя функция предназначена для отправки подтверждений для вновь зарегистрированных оговорок, которые определяются столбцом состояния бронирования (row[16]), и если значение, содержащееся в ячейке, составляет Новое бронирование, чем функция отправляет уведомление диспетчеру (но если значение другое, тогда оно ничего не делает, кроме проверки значений ячеек столбца).Проблемы с заменой значения, если ячейка пуста

Проблема заключается в том, что я не изменить свою функцию, чтобы отправить reservationNotes (row[11]) тогда и только тогда, когда клетка в соответствующей строке (т.е. с новой оговоркой) содержит самую оговорку примечания: значение ячейки в row[11] должны be не пусто.

Вот исходный код:

/* Отправка уведомлений о добавлении новых бронирований (т.е., новых строк в таблице на активном листе). */ 
function NotifyManagerOfNewReservation() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // Строка с первым бронированием для начала обработки. 
    var numRows = sheet.getLastRow()-1; // Количество строк с бронированиями для обработки. 
    var dataRange = sheet.getRange(startRow, 1, numRows, 18); // Охват столбцов для обработки ячеек, в данном случае с 1-го по 18-ый. 
    var data = dataRange.getValues(); // Получить значение ячеек в каждой ячейке каждой строке в рамках столбцов, охваченных верхним кодом. 
    var statusNewReservation = "Новое бронирование"; 
    var statusNotificationSent = "Уведомление отправлено"; 
    for (var i = 0; i < data.length; ++i) { 
     var row = data[i]; 
     var checkInDate = new Date(row[0]); 
     var checkOutDate = new Date(row[1]); 
     var formattedCheckInDate = Utilities.formatDate(checkInDate, "GMT+0300", "dd.MM.yyyy"); 
     var formattedCheckOutDate = Utilities.formatDate(checkOutDate, "GMT+0300", "dd.MM.yyyy"); 
     var fullCheckInDate = Utilities.formatDate(checkInDate, "GMT+0300", "dd.MM.yyyy") + " в 14:00"; 
     var fullCheckOutDate = Utilities.formatDate(checkOutDate, "GMT+0300", "dd.MM.yyyy") + " в 12:00"; 
     var reservationNumber = [i+2] + "0" + checkInDate.getFullYear(); // С 18:35, 26.09.2016 (МСК) используется универсальный формат номера бронирований (до этого момента он формировался по формуле [i+2]). 
     var roomType = "«" + row[2] + "»"; 
     var numberOfGuests = row[3]; 
     var numberOfNights = Math.round(Math.abs((checkOutDate.getTime() - checkInDate.getTime())/(24*60*60*1000))); 
     var costPerNight = row[4]; 
     var prepaymentCost = row[8]; 
     var unpaidCost = (costPerNight*numberOfNights)-prepaymentCost; 
     var formattedNumberOfNights = numberOfNights + " ночей"; // Количество ночей проживания. 
     var formattedCostPerNight = costPerNight + " руб."; 
     var formattedPrepaymentCost = prepaymentCost + " руб."; 
     var formattedUnpaidCost = unpaidCost + " руб."; // Сумма, которую необходимо оплатить гостю по приезде. 
     var contactFullName = row[5]; 
     var contactPhone = row[6]; 
     var contactEmail = row[7]; 
     var reservationNotes = row[11]; 
     var fullReservationNotes = ""; 
     var notificationStatus = row[16]; // Столбец, в котором выставляется статус отправки/неотправки уведомлений о новых бронированиях. 
     var reservationsListLink = "https://www.berdyanskaya56.ru/intranet/reservations/"; 
     /* Установка параметров отправителя. */ 
     var senderAliases = GmailApp.getAliases(); // Запрашиваем список всех элиасов электропочтового аккаунта. 
     Logger.log(senderAliases); // Проверяем список электропочтовых эллиасов и выбираем требующийся в формате senderAliases[N], где алиас, идущий первым по порядку, имеет значение «0» (к примеру, senderAliases[0] для [email protected]). 
     var senderAddress = "[email protected]"; // Указываем выбранный алиас. 
     var senderName = "Робот Руслана (мини-гостиница «Бердянская 56»)"; // Уточняем имя отправителя. 
     var replyTo = "[email protected]"; // Указываем электропочтовый адрес для ответа. 
     var highriseDropbox = "[email protected]"; // Адрес общего ящика аккаунта [email protected] в Хайрайзе. 
     var bccAddress = highriseDropbox; 
     var managerEmail = "[email protected]"; // Электропочта менеджера фронт-офиса. 
     var subject = "Новое бронирование № " + reservationNumber + " (" + contactFullName + ")"; 
     /* Не показываем строку с примечаниями к бронированию в случае их отсутствия. */ 
     if (reservationNotes !== "") {fullReservationNotes == "\nПримечания к бронированию: " + reservationNotes + "\n"} 
     var message = "Добавлено бронирование № " + reservationNumber + "!" + "\n" + "\nДанные нового бронирования:" + "\n" + "\nЗаезд: " + fullCheckInDate + "\nВыезд: " + fullCheckOutDate + "\nНомер: " + roomType + "\nТип размещения: " + numberOfGuests + "\n" + "\nКоличество ночей: " + formattedNumberOfNights + "\nЦена за ночь: " + formattedCostPerNight + "\nВнесённый депозит: " + formattedPrepaymentCost + "\n(" + formattedCostPerNight + " × " + formattedNumberOfNights + ")" + " – " + formattedPrepaymentCost + " = " + formattedUnpaidCost + " к оплате" + "\n" + "\nИмя и фамилия гостя: " + contactFullName + "\nМобильный телефон: " + contactPhone + "\nЭлектронная почта: " + contactEmail + "\n" + fullReservationNotes + "\nПожалуйста, срочно сделай занятым номер " + roomType + " в период с " + formattedCheckInDate + " (с 14:00)" + " по " + formattedCheckOutDate + " (до 12:00)" + " в экселевском файле!" + "\n" + "\n* Посмотреть полный список бронирований всегда можно тут: " + reservationsListLink + "."; 
      if (notificationStatus == statusNewReservation) { // Условное выражение, позволяющее не отправлять письма о тех же бронировациях повторно. 
      // MailApp.sendEmail(managerEmail, subject, message, {name: senderName, replyTo: replyTo}); 
      GmailApp.sendEmail(managerEmail, subject, message, {from: senderAddress, name: senderName, replyTo: replyTo, bcc: bccAddress}); 
      sheet.getRange(startRow + i, 17).setValue(statusNotificationSent); 
      Logger.log("Отправлено уведомление о новом бронировании № " + reservationNumber + " (" + contactFullName + ")" + " на " + managerEmail + "."); 
      } 
      SpreadsheetApp.flush(); // Показываем пользователю что изменения вступают в силу. 
     } 
} 

Я использую «косвенный» переменная fullReservationNotes проверить if (reservationNotes !== "") {fullReservationNotes == "\nПримечания к бронированию: " + reservationNotes + "\n"} для реализации этого, но он не работает должным образом: он показывает, ни одна из оговорок не замечает, даже если клетка a reservationNotes (row[11]) столбец заполнен или пуст.

Таким образом, если клетка в row[11] пусто для любой добавленной оговорки, то должно быть ничего не ставить в "\nПримечания к бронированию: " + reservationNotes + "\n" и fullReservationNotes также должна быть оставлена ​​пустой в сообщении уведомления.

Я также потратил полчаса на поиск существующих вопросов, но я не нашел подобных случаев для себя.

Как решить эту проблему? Может быть, я пропущу что-нибудь с циклом выше описанного, если предложение?

Большое спасибо за ваш вклад в решение этой проблемы!

ответ

0

Если я правильно читать, я считаю, что проблема с вашим назначением после того, если вы используете оператор сравнения (==) вместо оператора присваивания (=)

Try:

if (reservationNotes !== "") {fullReservationNotes = "\nПримечания к бронированию: " + reservationNotes + "\n"} 
0

Единственные проблемы, которые я вижу с вашим кодом, это то, что в конце полного назначения резервирования нет полутонов, а также я не думаю, что == - оператор присваивания.

if (reservationNotes !== "") 
{ 
    fullReservationNotes == "\nПримечания к бронированию: " + reservationNotes + "\n" 
} 
Смежные вопросы