我面临在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; // Собираем воедино все найденные бронирования.
然而:
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. Чтобы найти бронирования, попробуйте запустить процедуру поиска снова.");
}
}
始终为空)。 我还没有在StackOverflow上发现太多帮助。
如何解决此问题?是否有任何代码行检查单元格是否包含搜索值?
答案 0 :(得分:0)
我不确定这一行会发生什么
(reservationNotes == "") {fullReservationNotes == ""}
因为我猜你想要这样说。
(reservationNotes == "") {fullReservationNotes = "";}
所以没有分号,第二个应该是一个赋值。第一个是比较。
我想我以前见过这个代码,并且让我意识到在另一个国家去学校会很困难,所有的文字都会在我的编辑器中出现,因为这个&#34; ??? ??????? ?????? ????????????&#34;,&#34; ?? ?????? ??????? ??????? &#34;