구글 스프레드시트 연동 가이드
폼 제출 데이터를 구글 스프레드시트에 자동으로 저장하는 방법입니다.
1. 구글 스프레드시트 준비
- 구글 스프레드시트에 접속 후 + 버튼을 눌러 새 스프레드시트를 만듭니다.
- 1행(첫 번째 행)에 컬럼명을 입력합니다. DYC Labs에서 보낼 데이터는 아래와 같이 매핑됩니다.
title→ 폼 제목date→ 제출 일시- 그 외 컬럼명은 폼 필드 라벨과 동일하게 입력하면 해당 값이 들어갑니다. (예: 폼에 「이름」 필드가 있으면 1행에
이름컬럼 추가)
※ 컬럼명 좌우에 공백이 들어가면 데이터 오류가 발생합니다. 알파벳/한글 앞뒤 여백을 넣지 마세요.
2. 스크립트 편집기에서 웹앱 설정 (새 편집기 기준)
- 스프레드시트 상단 메뉴에서 확장 프로그램 → Apps Script를 선택합니다. (새 스크립트 편집기가 열립니다. 이전 편집기를 쓰려면 우측 「이전 편집기 사용」을 선택할 수 있습니다.)
- 기본으로 있는
function...코드를 모두 지운 뒤, 아래 스크립트를 붙여넣고 저장합니다.
// 1. 시트 이름을 수정할 수 있습니다 (기본: 시트1)
// 2. 실행 → setup 한 번 실행 (최초 1회 권한 허용)
// 3. 배포 → 새 배포 → 유형: 웹 앱, 액세스: 모든 사용자
// 4. 생성된 웹 앱 URL을 DYC Labs 연동 설정에 입력
var XLS_SHEET_NAME = '시트1';
var XLS_SCRIPT_PROP = PropertiesService.getScriptProperties();
function doGet(e) { return handleResponse(e); }
function doPost(e) { return handleResponse(e); }
function handleResponse(e) {
var lock = LockService.getPublicLock();
lock.waitLock(30000);
try {
var doc = SpreadsheetApp.openById(XLS_SCRIPT_PROP.getProperty('key'));
var sheet = doc.getSheetByName(XLS_SHEET_NAME);
var headRow = e.parameter.header_row || 1;
var allHeaders = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var headers = [];
for (var h = 0; h < allHeaders.length; h++) {
var cell = allHeaders[h];
if (cell !== null && cell !== undefined && String(cell).trim() !== '') {
headers.push(String(cell).trim());
}
}
if (headers.length === 0) {
throw new Error('1행에 컬럼명(헤더)을 입력해 주세요.');
}
var nextRow = sheet.getLastRow() + 1;
var row = [];
for (var i = 0; i < headers.length; i++) {
if (headers[i] == 'Timestamp') {
row.push(new Date());
} else {
row.push(e.parameter[headers[i]] || '');
}
}
var colLetter = columnToLetter(headers.length);
var rangeA1 = 'A' + nextRow + ':' + colLetter + nextRow;
sheet.getRange(rangeA1).setValues([row]);
return ContentService
.createTextOutput(JSON.stringify({'result':'success', 'row': nextRow}))
.setMimeType(ContentService.MimeType.JSON);
} catch (err) {
return ContentService
.createTextOutput(JSON.stringify({'result':'error', 'error': err.toString()}))
.setMimeType(ContentService.MimeType.JSON);
} finally {
lock.releaseLock();
}
}
function columnToLetter(n) {
if (n < 1) return 'A';
var s = '';
while (n > 0) {
n--;
s = String.fromCharCode(65 + (n % 26)) + s;
n = Math.floor(n / 26);
}
return s;
}
function setup() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
XLS_SCRIPT_PROP.setProperty('key', doc.getId());
}- 실행 → 함수 실행 → setup을 선택해 한 번 실행합니다. (최초 1회 「이 프로젝트에서 내 데이터에 액세스하려면 내 승인이 필요합니다」 메시지에서 계정 선택 → 고급 → 테스트 프로젝트 이동 → 허용)
- 배포 → 새 배포를 클릭한 뒤, 유형 톱니바퀴에서 웹 앱을 선택합니다.
- 배포 구성에서 다음 사용자 인증 정보로 실행: 나, 액세스 권한이 있는 사용자: 모든 사용자로 설정한 뒤 배포합니다.
- 생성된 웹 앱 URL을 복사합니다. (형식:
https://script.google.com/macros/s/.../exec. 사용 전 메모장 등에 저장해 두세요.)
3. DYC Labs에서 연동 설정
- 폼 상세 → 연동 탭으로 이동합니다.
- 구글 스프레드시트 연동을 활성화합니다.
- 복사한 웹앱 URL을 붙여넣고 저장합니다.
- 이제 해당 폼에 제출이 들어올 때마다 스프레드시트에 한 행씩 자동으로 추가됩니다.
4. 컬럼 매핑 예시
스프레드시트 1행에 아래와 같이 컬럼을 두면 DYC Labs가 보내는 값이 자동으로 매핑됩니다.
| 1행 컬럼명 | 전달 값 |
|---|---|
title | 폼 제목 |
date | 제출 일시 |
| 이름 | 폼 필드 라벨이 「이름」인 값 |
연락처 | 폼 필드 라벨이 「연락처」인 값 |
폼 필드의 라벨과 스프레드시트 1행의 컬럼명이 정확히 일치해야 해당 셀에 값이 들어갑니다. 컬럼명 앞뒤 공백이 있으면 데이터가 들어가지 않으니 주의하세요.
5. 전송 상태 확인
제출 데이터 탭의 전송 상태 열에서 구글 스프레드시트 전송 성공/실패를 확인할 수 있습니다. 실패 시 URL 또는 스프레드시트 컬럼명을 다시 확인해 주세요.
에러가 "Request failed with status code 401"인 경우
401은 인증 실패입니다. DYC Labs 서버는 Google 로그인 없이 웹앱 URL로만 요청을 보내므로, 웹 앱 배포 시 액세스 권한을 반드시 「모든 사용자」로 설정해야 합니다. 「나만」 또는 「Google 계정이 있는 사용자」로 되어 있으면 401이 발생합니다. Apps Script에서 배포 → 배포 관리 → 해당 웹 앱 편집 후 액세스 권한이 있는 사용자: 모든 사용자로 변경하고 새 버전으로 다시 배포해 주세요.