在指定列中查找文本时出现问题

时间:2017-02-20 11:21:12

标签: google-apps-script google-sheets

我面临在3个指定列中找到指定内容(即日期或字符串文本)的问题(例如row[0]表示签入日期,row[1]表示签出,{ {1}}来自客人'全名)。该脚本打开一个对话窗口,并要求输入搜索查询。之后,建议性地,它检查数据范围内的所有指定单元格以查找所请求的搜索查询。

如果找到任何内容,则会显示搜索结果row[5],其中找到的结果处理为:

ui.alert

完整源代码:

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; // Собираем воедино все найденные бронирования.

然而:

  1. 它从未找到任何东西。 (搜索结果的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. Чтобы найти бронирования, попробуйте запустить процедуру поиска снова."); } } 始终为空)。
  2. 关闭没有结果的窗口后,它会反复弹出。我打赌这是因为错误设置if循环,但我没能解决它。
  3. 我还没有在StackOverflow上发现太多帮助。

    如何解决此问题?是否有任何代码行检查单元格是否包含搜索值?

1 个答案:

答案 0 :(得分:0)

我不确定这一行会发生什么

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

因为我猜你想要这样说。

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

所以没有分号,第二个应该是一个赋值。第一个是比较。

我想我以前见过这个代码,并且让我意识到在另一个国家去学校会很困难,所有的文字都会在我的编辑器中出现,因为这个&#34; ??? ??????? ?????? ????????????&#34;,&#34; ?? ?????? ??????? ??????? &#34;