const SHEET_ID = "1vhAq7sJdbtz6Rr2aTeiqcVgw2AtM_HOZFodFrK12-xI"; /* Если лист называется не «Лист1», впишите ниже его точное название. */ const SHEET_NAME = "Лист1"; /* A = 1 — колонка с email B = 2 — колонка с именем и фамилией */ const EMAIL_COLUMN = 1; const NAME_COLUMN = 2; function doGet(e) { const callback = String(e.parameter.callback || "callback") .replace(/[^a-zA-Z0-9_.$]/g, ""); const requestedEmail = normalizeEmail(e.parameter.email || ""); let result = { success: false, found: false, message: "Email не найден." }; try { if (!requestedEmail || !isValidEmail(requestedEmail)) { result.message = "Введите корректный email."; return createJsonpResponse(callback, result); } const sheet = SpreadsheetApp .openById(SHEET_ID) .getSheetByName(SHEET_NAME); if (!sheet) { throw new Error("Лист не найден: " + SHEET_NAME); } const lastRow = sheet.getLastRow(); if (lastRow < 2) { result.message = "Список участников пуст."; return createJsonpResponse(callback, result); } const numberOfColumns = Math.max(EMAIL_COLUMN, NAME_COLUMN); const rows = sheet .getRange(2, 1, lastRow - 1, numberOfColumns) .getDisplayValues(); for (let i = 0; i < rows.length; i++) { const email = normalizeEmail(rows[i][EMAIL_COLUMN - 1]); const fullName = String(rows[i][NAME_COLUMN - 1] || "").trim(); if (email === requestedEmail) { result = { success: true, found: true, fullName: fullName, message: "Участник найден." }; return createJsonpResponse(callback, result); } } return createJsonpResponse(callback, result); } catch (error) { result.message = "Ошибка проверки данных."; console.error(error); return createJsonpResponse(callback, result); } } function normalizeEmail(value) { return String(value || "") .trim() .toLowerCase(); } function isValidEmail(value) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value); } function createJsonpResponse(callback, data) { const safeCallback = callback || "callback"; return ContentService .createTextOutput( safeCallback + "(" + JSON.stringify(data) + ");" ) .setMimeType(ContentService.MimeType.JAVASCRIPT); }