2017-02-20 1 views
0

Ich stehe vor dem Problem, angegebenen Inhalt (dh Datum oder Zeichenfolge Text) in 3 angegebenen Spalten (z. B. row[0] für Check-in-Datum, row[1] für Check-out, row[5] für Gäste vollständiger Name). Das Skript öffnet ein Dialogfenster und fragt nach einer Suchanfrage. Anschließend werden alle angegebenen Zellen in einem Datenbereich für eine angeforderte Suchanfrage suggestiv überprüft.Problem mit der Suche nach Text in angegebenen Spalten

Wenn es etwas findet, dann zeigt es eine Suchergebnis ui.alert mit gefundenen Ergebnisse verarbeitet, wie:

var foundReservations = "\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; 
reservationsSearchResults += foundReservations; // Собираем воедино все найденные бронирования. 

vollständige Quellcode:

function FindReservationsBySpecifiedDetails() { 
    var ui = SpreadsheetApp.getUi(); 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // Строка с первым бронированием для начала обработки. 
    var numRows = sheet.getLastRow()-1; // Количество строк с бронированиями для обработки. 
    var dataRange = sheet.getRange(startRow, 1, numRows, 11); // Охват столбцов для обработки ячеек, в данном случае с 1-го по 12-ый. 
    var data = dataRange.getValues(); // Получить значение ячеек в каждой ячейке каждой строке в рамках столбцов, охваченных верхним кодом. 
    var statusConfirmationSent = "Подтверждение отправлено"; 
    var statusConfirmationNotSent = "Подтверждение не отправлено"; 
    /* Поехали. */ 
    var step1 = ui.prompt("Поиск бронирований", "Чтобы начать поиск бронирований по (1) дате заезда, (2) дате выезда, (3) номеру бронированию и (4) имени и фамилии гостя, введите запрос. Например, 03/07/2016.", ui.ButtonSet.OK); 
    var step1Button = step1.getSelectedButton(); 
    var searchQuery = step1.getResponseText(); 
    var formattedSearchQuery = "«" + searchQuery + "»"; 
    var numberOfReservationsFound = ""; 
    var reservationsSearchResults = ""; 
    if (step1Button == ui.Button.OK) { 
     for (var i = 0; i < data.length; ++i) { 
      for (var j = 0; j < data[i].length; j++) { 
       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 comissionFeeForPayingWithBankCard = "0.02"; // Комиссия при оплате стоимости проживания с помощью банковской карты. 
       var formattedComissionFeeForPayingWithBankCard = comissionFeeForPayingWithBankCard*100 + "%"; 
       var fullComissionFeeForPayingWithBankCard = formattedComissionFeeForPayingWithBankCard + " комиссии"; 
       var totalUnpaidCostPaidWithBankCard = unpaidCost+(unpaidCost*comissionFeeForPayingWithBankCard); 
       var formattedNumberOfNights = numberOfNights + " ночей"; // Количество ночей проживания. 
       var formattedCostPerNight = costPerNight + " руб."; 
       var formattedPrepaymentCost = prepaymentCost + " руб."; 
       var formattedUnpaidCost = unpaidCost + " руб."; // Сумма, которую необходимо оплатить гостю по приезде. 
       var formattedTotalUnpaidCostPaidWithBankCard = totalUnpaidCostPaidWithBankCard + " руб."; 
       var contactFullName = row[5]; 
       var contactGivenName = contactFullName.split(" ").slice(0, -1).join(" "); 
       var contactPhone = row[6]; 
       var contactEmail = row[7]; 
       var reservationNotes = row[11]; 
       /* Не показываем строку с примечаниями к бронированию в случае их отсутствия. */ 
       var fullReservationNotes = "\nПримечания к бронированию: " + reservationNotes + "\n"; 
        if (data[i][j].toString().indexOf(searchQuery) > -1) { 
        if (reservationNotes == "") {fullReservationNotes == ""} 
        var foundReservations = "\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; 
        reservationsSearchResults += foundReservations; // Собираем воедино все найденные бронирования. 
      } 
     } 
     // return(count); 
    } 
    var step2 = ui.alert("Результаты поиска бронирований", "По вашему запросу найдено " + numberOfReservationsFound + " результат(ов):" + reservationsSearchResults, ui.ButtonSet.YES_NO); 
    var step2Button = step2.getSelectedButton(); 
    /* Когда пользователь нажимает «Да» на шаге № 2. */ 
    if (step2 == ui.Button.YES) { 
    ui.alert("Результаты поиска бронирований были приняты пользователем на шаге представления результатов поиска."); 
    Logger.log("Результаты поиска бронирований были приняты пользователем на шаге представления результатов поиска."); 
    } 
    /* Когда пользователь нажимает «Нет» на шаге № 2. */ 
    else if (step2 == ui.Button.NO) { 
    ui.alert("Результаты поиска бронирований были отклонены пользователем на шаге представления результатов поиска."); 
    Logger.log("Результаты поиска бронирований были отклонены пользователем на шаге представления результатов поиска."); 
    } 
    /* Когда пользователь нажимает «Закрыть» на шаге № 2. */ 
    else if (step2 == ui.Button.CLOSE) { 
    ui.alert("Окно с представленными результатами поиска бронирований были закрыты пользователем."); 
    Logger.log("Окно с представленными результатами поиска бронирований были закрыты пользователем."); 
    } 
    } else { 
    ui.alert("По запросу " + formattedSearchQuery + " не найдено ни одного бронирования. Пожалуйста, попробуйте задать другой запрос."); 
    } 
    if (step1Button == ui.Button.CLOSE) { 
    ui.alert("Поиск бронирований был прерван пользователем на шаге № 1. Чтобы найти бронирования, попробуйте запустить процедуру поиска снова."); 
    } 
} 

jedoch:

  1. Es ist nie findet alles. (ui.alert mit Suchergebnissen ist immer leer).
  2. Nachdem ich ein Fenster mit keine Ergebnisse geschlossen habe, beginnt es iterativ auftauchen. Ich wette, dass es wegen falsch konfigurierter if-Schleife auftritt, aber ich konnte es nicht beheben.

Ich habe nicht viel auf StackOverflow gefunden, das hilft.

Wie kann ich dieses Problem beheben? Gibt es irgendetwas mit den Codezeilen, in denen die Zellen nach Suchwerten suchen?

Antwort

0

Ich bin mir nicht sicher, was auf dieser Strecke passieren wird

(reservationNotes == "") {fullReservationNotes == ""} 

, weil ich vermute, dass Sie es wollen, anstatt zu sagen.

(reservationNotes == "") {fullReservationNotes = "";} 

Also kein Semikolon und die zweite sollte eine Zuordnung sein. Der erste ist ein Vergleich.

Ich denke, dass ich diesen Code gesehen habe, bevor und es demütigte mich zu erkennen, wie schwierig es wäre in einem anderen Land in der Schule gehen, wo alle ihren Text würde „in meinem Editor wie diese kommt ??????? ?????? ???????????? "," ?? ?????? ??????? ???????? ".

+0

Ja, ich habe diese Zeile bereits bearbeitet. Bezüglich der Kommentare verwende ich Russisch, um es für meine Kollegen ausführlicher zu machen. – RLearnsR

Verwandte Themen