// Google Apps Script 백엔드 코드 (Code.gs)
// 웹앱 진입점
function doGet() {
return HtmlService.createHtmlOutputFromFile('index')
.setTitle('나의 심리적 안전기지')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
// 스프레드시트 가져오기
function getSpreadsheet() {
return SpreadsheetApp.getActiveSpreadsheet();
}
// 학생 목록 가져오기
function getStudents() {
try {
const ss = getSpreadsheet();
const sheet = ss.getSheetByName('시트1') || ss.getSheets()[0];
const lastRow = sheet.getLastRow();
if (lastRow < 2) {
return [];
}
const data = sheet.getRange(2, 1, lastRow - 1, 3).getValues();
const students = [];
data.forEach((row, index) => {
const [classNum, studentNum, name] = row;
if (name && name.toString().trim()) {
students.push({
id: `${classNum}-${studentNum}`,
name: `${studentNum}번 ${name}`
});
}
});
return students;
} catch (error) {
console.error('학생 목록 가져오기 오류:', error);
return [];
}
}
// 출력결과 시트 생성 또는 가져오기
function getOutputSheet() {
const ss = getSpreadsheet();
let outputSheet = ss.getSheetByName('출력결과');
if (!outputSheet) {
outputSheet = ss.insertSheet('출력결과');
const headers = ['타임스탬프', '번호-이름', '완성된 글'];
outputSheet.getRange(1, 1, 1, headers.length).setValues([headers]);
const headerRange = outputSheet.getRange(1, 1, 1, headers.length);
headerRange.setBackground('#4A90E2');
headerRange.setFontColor('#FFFFFF');
headerRange.setFontWeight('bold');
headerRange.setHorizontalAlignment('center');
outputSheet.setColumnWidth(1, 150);
outputSheet.setColumnWidth(2, 120);
outputSheet.setColumnWidth(3, 500);
}
return outputSheet;
}
// 폼 데이터 제출 처리
function submitForm(data) {
try {
const outputSheet = getOutputSheet();
const timestamp = new Date();
const formattedTimestamp = Utilities.formatDate(timestamp, Session.getScriptTimeZone(), 'yyyy-MM-dd HH:mm:ss');
const newRow = [
formattedTimestamp,
data.student,
data.finalText
];
const lastRow = outputSheet.getLastRow();
outputSheet.getRange(lastRow + 1, 1, 1, newRow.length).setValues([newRow]);
const newRowRange = outputSheet.getRange(lastRow + 1, 1, 1, newRow.length);
newRowRange.setBorder(true, true, true, true, true, true);
outputSheet.getRange(lastRow + 1, 3).setWrap(true);
return { success: true, message: '성공적으로 저장되었습니다.' };
} catch (error) {
console.error('폼 제출 오류:', error);
throw new Error('데이터 저장 중 오류가 발생했습니다: ' + error.message);
}
}