Chat GPT가 만들어준 조회시스템 App Script 코드공개
반응형
ChatGPT와 함께한 무료 조회 시스템 만들기 – HTML과 구글시트(Google Sheets) + 구글앱스스크립트(Google
이번 글에서는 ChatGPT와 함께 고민하고 만들었던 무료 조회 시스템 구축 방법을 공유해보려고 합니다. 별도의 서버나 데이터베이스 없이, 단지 구글스프레드시트와 Google Apps Script, 그리고 간단한
www.earthhero.me
일전에 개시한 글의 html코드를 공개합니다.
중간중간에 개인적인 ID를 적을 부분은 별도로 표기했습니다.
function doPost(e) { var recaptchaResponse = e.parameter["g-recaptcha-response"]; var secretKey = "스크립트ID작성"; var verifyUrl = "https://www.google.com/recaptcha/api/siteverify"; var payload = { method: "post", payload: { secret: secretKey, response: recaptchaResponse } }; var response = UrlFetchApp.fetch(verifyUrl, payload); var json = JSON.parse(response.getContentText()); if (!json.success) { return HtmlService.createHtmlOutput("<p>❗로봇 인증(reCAPTCHA) 실패. 다시 시도해주세요.</p>"); } var year = e.parameter.year.trim(); var month = e.parameter.month.trim(); var owner = e.parameter.owner.trim(); var phone = e.parameter.phone.trim(); var birth = e.parameter.birth.trim(); var sheetName = year + month + "월분"; var spreadsheet = SpreadsheetApp.openById("스프레드시트 파일 ID"); var sheet = spreadsheet.getSheetByName(sheetName); if (!sheet) { return HtmlService.createHtmlOutput("<p>❗조회하려는 시트(" + sheetName + ")가 존재하지 않습니다.</p>"); } var data = sheet.getDataRange().getValues(); var results = []; for (var i = 1; i < data.length; i++) { var nameCell = String(data[i][0]).trim(); var phoneCell = String(data[i][1]).replace(/\D/g, '').trim(); var birthCell = String(data[i][2]).trim(); if (nameCell === owner && phoneCell === phone && birthCell === birth) { results.push({ unit: data[i][3], // D: 호실 total: data[i][4], // E: 당월부과금액 (노란색 표시 예정) basic: data[i][5], // F: 기본전기료 elecfund: data[i][6], // G: 전력기금 indivElec: data[i][7], // H: 세대전기료 commonElec: data[i][8], // I: 공동전기료 waste: data[i][9], // J: 오폐수수료 water: data[i][10], // K: 공동수도료 deposit: data[i][11], // L: 가수금 payBefore: data[i][12], // M: 납기내 payAfter: data[i][13], // N: 납기후 usage: data[i][14], // O: 전기사용량 taxFree: data[i][15], // P: 비과세 vatExempt: data[i][16], // Q: 면세 prevIndex: data[i][17], // R: 전기전월지침 currIndex: data[i][18], // S: 전기당월지침 area: data[i][19], // T: 평형 subtotal: data[i][20], // U: 관리비소계 collection: data[i][21] // V: 징수대행소계 }); } } if (results.length === 0) { return HtmlService.createHtmlOutput("<p>❗조회된 관리비 정보가 없습니다. 입력 정보를 다시 확인해주세요.</p>"); } var html = "<!DOCTYPE html><html lang='ko'><head><meta charset='UTF-8'>" + "<meta name='viewport' content='width=device-width, initial-scale=1.0'>" + "<title>관리비 조회 결과</title>" + "<style>body{font-family:sans-serif;padding:20px;}table{border-collapse:collapse;width:100%;margin-top:20px;}th,td{border:1px solid #ccc;padding:8px;text-align:center;}th{background:#f0f0f0;}@media(max-width:600px){table{font-size:13px;}}</style>" + "</head><body><h2>" + owner + "님의 " + sheetName + " 관리비 조회 결과</h2>"; html += "<div style='overflow-x:auto;'><table><thead><tr>" + "<th>호실</th><th style='background-color:#fff3cd;'>당월부과금액</th><th>기본전기료</th><th>전력기금</th><th>세대전기료</th>" + "<th>공동전기료</th><th>오폐수수료</th><th>공동수도료</th><th>가수금</th><th>납기내</th><th>납기후</th>" + "<th>전기사용량</th><th>비과세</th><th>면세</th><th>전기전월지침</th><th>전기당월지침</th><th>평형</th><th>관리비소계</th><th>징수대행소계</th>" + "</tr></thead><tbody>"; results.forEach(function(r) { html += "<tr><td>" + r.unit + "</td>" + "<td style='background-color:#fff3cd; font-weight:bold;'>" + r.total + "</td>" + "<td>" + r.basic + "</td><td>" + r.elecfund + "</td><td>" + r.indivElec + "</td><td>" + r.commonElec + "</td>" + "<td>" + r.waste + "</td><td>" + r.water + "</td><td>" + r.deposit + "</td><td>" + r.payBefore + "</td><td>" + r.payAfter + "</td>" + "<td>" + r.usage + "</td><td>" + r.taxFree + "</td><td>" + r.vatExempt + "</td><td>" + r.prevIndex + "</td><td>" + r.currIndex + "</td><td>" + r.area + "</td>" + "<td>" + r.subtotal + "</td><td>" + r.collection + "</td></tr>"; }); html += "</tbody></table></div>"; html += "<p style='margin-top:10px; color:#888;'>※ 위 내용을 복사하여 엑셀에 붙여넣기 하면 저장이 가능합니다.</p>"; html += "</body></html>"; return HtmlService.createHtmlOutput(html); } function doGet(e) { return HtmlService.createHtmlOutput("<p>이 페이지는 직접 접근할 수 없습니다.</p>"); }

반응형
댓글을 사용할 수 없습니다.