cat · title · start · kind · dept · mgr · role · tel · addr · hc · region · tag
💡 빠른 방법: 각 관리 화면에서 [내려받기]한 JSON을 열어 항목을 보면 열 이름을 그대로 옮길 수 있습니다. 날짜 열(차기예정일·최근일 등)은 시트에서 서식 → yyyy-mm-dd로 맞추세요 (확인 필요: 시트 지역설정).
2단계 · Apps Script 붙여넣기
시트 상단 확장 프로그램 → Apps Script 클릭
기본 코드를 지우고 아래 코드를 전부 붙여넣기 → 저장(💾)
// ── KSmate 안전보건 데이터 API ──
function doGet(e){
var tab = (e.parameter.tab || '').trim();
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tab);
if(!sh) return out([]);
var vals = sh.getDataRange().getDisplayValues();
if(vals.length < 2) return out([]);
var head = vals.shift();
var rows = vals.filter(function(r){ return r.join('') !== ''; }).map(function(r){
var o = {}; head.forEach(function(h, i){ if(h) o[h] = r[i]; }); return o;
});
return out(rows);
}
function doPost(e){ // (선택) 사이트에서 저장까지 하고 싶을 때
var body = JSON.parse(e.postData.contents); // { tab:'compliance', rows:[...] }
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(body.tab);
if(!sh) return out({ ok:false });
var rows = body.rows || [];
var head = rows.length ? Object.keys(rows[0]) : [];
sh.clearContents();
if(head.length){
sh.appendRow(head);
rows.forEach(function(r){ sh.appendRow(head.map(function(h){ return r[h]; })); });
}
return out({ ok:true, count: rows.length });
}
function out(obj){
return ContentService.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}
3단계 · 웹앱으로 배포 → 주소 복사
우측 상단 배포 → 새 배포
유형 웹 앱 선택
실행 계정 나 · 액세스 권한 모든 사용자(Anyone) 선택 → 배포
표시되는 웹 앱 URL을 복사 (예: https://script.google.com/macros/s/AKfy.../exec)
확인 필요 — 최초 배포 시 구글 권한 승인 창이 뜹니다(본인 계정 승인). 회사 보안정책상 "모든 사용자" 공개가 가능한지 확인하세요. 민감정보는 시트에 넣지 마세요(부서·직무 요약).
4단계 · 사이트에 주소 넣기 (한 줄)
사이트 폴더의 data/_localdata.js 파일을 메모장으로 열기
맨 위 이 줄을 찾아, 따옴표 안에 복사한 주소를 붙여넣기:
window.KS_DATA_URL = "여기에_웹앱_URL_붙여넣기";
저장 → 사이트를 다시 배포(또는 Netlify에 파일 교체). 끝.
이제 사이트의 사고·위험성평가·교육·인증·일정 화면은 구글시트에서 데이터를 읽습니다. 시트에서 값을 고치고 사이트를 새로고침하면 바로 반영됩니다. (docs-index 등 검색용 정적자료는 그대로 사이트 파일 사용)
이제 이렇게 씁니다
하고 싶은 일
방법
데이터 입력·수정
구글시트에서 직접 입력 (다운로드·파일교체 없음)
사이트에서 보기
화면 새로고침 → 시트 최신값 표시
보고서·TBM 생성
기존과 동일 (시트 데이터로 자동 생성)
참고 — 사이트 화면의 [화면에 적용]은 여전히 "화면 임시 반영"입니다. 실제 데이터는 시트에서 관리하세요. 사이트 화면에서 저장까지 하려면 위 doPost를 이용해 각 화면 저장 버튼을 연결해야 하며, 이 작업은 원하시면 별도로 적용해 드립니다. 확인 필요: 구글 웹앱은 브라우저 요청 시 리다이렉트/CORS 이슈가 있을 수 있어, 첫 연동 후 실제 표시 여부를 테스트하세요.