스프레드시트 활용

[자동화 스크립트 1] 주간 보고서 자동생성

JS's Spreadsheets 2025. 9. 2. 13:36

🔗 지금 바로 사용해보세요!

📥 자동화와 매크로 스프레드시트(주간보고서 시트) 바로가기

클릭  번으로 바로 접속해서 복사하여 사용하실  있습니다

 

Apps Script 환경 진입

1.      확장 프로그램 → Apps Script 클릭

2.     새 프로젝트 생성: "자동화 마스터" 이름 설정

3.      코드 편집기 환경 확인

    - 파일에서 스크립트 선택

    - 이름을 '주간 보고서 자동 생성.gs'라고 저장

    - 아래 3가지 함수를 입력

 

 

기본 데이터 수집 함수

function collectWeeklyData() {
  // 활성 스프레드시트의 주간보고서 시트 가져오기
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("주간보고서");
 
  // 데이터 범위 가져오기 (A2:F8, 헤더 제외)
  var data = sheet.getRange("A2:F8").getValues();
 
  var totalSales = 0;
  var totalOrders = 0;
  var totalCustomers = 0;
 
  // 일별 데이터 합계 계산
  for (var i = 0; i < data.length; i++) {
    totalSales += data[i][1];      // B열: 매출액
    totalOrders += data[i][2];     // C열: 주문수
    totalCustomers += data[i][3];  // D열: 고객수
  }
 
  // 결과 객체 반환
  return {
    sales: totalSales,
    orders: totalOrders,
    customers: totalCustomers,
    avgOrder: Math.round(totalSales / totalOrders),
    period: "2025년 35주차 (8/25-8/31)"
  };
}

 

보고서 자동 생성 함수

function generateWeeklyReport() {
  // 주간 데이터 수집
  var weeklyData = collectWeeklyData();
 
  // 새 시트 생성 (보고서용)
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var reportSheet;
 
  // 기존 보고서 시트가 있으면 삭제 후 새로 생성
  try {
    reportSheet = spreadsheet.getSheetByName("자동생성보고서");
    spreadsheet.deleteSheet(reportSheet);
  } catch (e) {
    // 시트가 없으면 무시
  }
 
  // 새 보고서 시트 생성
  reportSheet = spreadsheet.insertSheet("자동생성보고서");
 
  // 보고서 헤더 작성
  reportSheet.getRange("A1").setValue("주간 매출 보고서");
  reportSheet.getRange("A1").setFontSize(16).setFontWeight("bold");
 
  // 보고서 내용 자동 입력
  reportSheet.getRange("A3").setValue("보고 기간:");
  reportSheet.getRange("B3").setValue(weeklyData.period);
 
  reportSheet.getRange("A4").setValue("총 매출액:");
  reportSheet.getRange("B4").setValue(weeklyData.sales.toLocaleString() + " 원");
 
  reportSheet.getRange("A5").setValue("총 주문 수:");
  reportSheet.getRange("B5").setValue(weeklyData.orders + " 건");
 
  reportSheet.getRange("A6").setValue("총 고객 수:");
  reportSheet.getRange("B6").setValue(weeklyData.customers + " 명");
 
  reportSheet.getRange("A7").setValue("평균 주문액:");
  reportSheet.getRange("B7").setValue(weeklyData.avgOrder.toLocaleString() + " 원");
 
  reportSheet.getRange("A9").setValue("보고서 생성일시:");
  reportSheet.getRange("B9").setValue(new Date());
 
  // 서식 적용
  reportSheet.getRange("A3:A7").setFontWeight("bold");
  reportSheet.autoResizeColumns(1, 2);
 
  Logger.log("주간 보고서가 성공적으로 생성되었습니다.");
}

 

이메일 자동 발송 함수

function sendWeeklyReport() {
  // 보고서 생성
  generateWeeklyReport();
 
  // 수신자 정보 설정
  var recipient = "manager@####.com";  // 실제 이메일 주소로 변경
  var subject = "주간 매출 보고서 - " + new Date().toLocaleDateString();
 
  // 이메일 본문 작성
  var weeklyData = collectWeeklyData();
  var body = "안녕하세요.\n\n";
  body += weeklyData.period + " 주간 매출 보고서를 전송드립니다.\n\n";
  body += "📊 주요 지표:\n";
  body += "• 총 매출액: " + weeklyData.sales.toLocaleString() + "원\n";
  body += "• 총 주문 수: " + weeklyData.orders + "건\n";
  body += "• 총 고객 수: " + weeklyData.customers + "명\n";
  body += "• 평균 주문액: " + weeklyData.avgOrder.toLocaleString() + "원\n\n";
  body += "상세한 보고서는 첨부된 스프레드시트에서 확인하실 수 있습니다.\n\n";
  body += "감사합니다.\n자동화 시스템";
 
  // 이메일 발송
  try {
    GmailApp.sendEmail(recipient, subject, body);
    Logger.log("이메일이 성공적으로 발송되었습니다: " + recipient);
  } catch (error) {
    Logger.log("이메일 발송 실패: " + error.toString());
  }
}

 

 

함수 실행 테스트:

1.     collectWeeklyData, generateWeeklyReport, sendWeeklyReport 함수 선택 후 실행 버튼

2.     권한 승인 진행

3.     결과 확인
    - 기본 데이터를 수집 실행이 시작되고 완료됨을 로그를 통해 확인가능

    - 새로 생성된 "자동생성보고서" 시트 확인


    - 수신자 정보 설정
      var recipient = "manger@####.com";  // 실제 이메일 주소로 변경시, 해당 이메일로 보고서가 발송됨.