본문 바로가기

마이크로 ERP

여러 견적 요청 자동 처리 – 고객별 견적서를 개별 PDF로 생성해 자동 저장하는 구조 만들기

견적 요청이 하루에도 여러 건씩 들어오는 경우, 각 요청을 일일이 확인하고, 상품 수량을 계산해 단가를 적용하고, 고객별로 견적서를 작성하는 일은 매우 비효율적이고 시간이 오래 걸리는 작업입니다. ERP에서는 이런 과정을 자동으로 처리해 주는 기능이 있지만, 비용 부담이나 시스템 도입의 복잡함 때문에 모든 사업자가 사용할 수 있는 것은 아닙니다. 구글 스프레드시트와 앱스 스크립트를 활용하면 여러 건의 견적 요청을 한 번에 불러오고, 요청별로 단가와 총액을 자동 계산하여 고객별로 견적서를 분리 생성하고 PDF로 저장하는 시스템을 구현할 수 있습니다. 이 글에서는 이러한 자동 견적 분리 처리 구조를 단계별로 설명하고, 실제 적용 가능한 방식으로 안내합니다.

 

여러 견적 요청 자동 처리 – 고객별 견적서를 개별 PDF로 생성해 자동 저장하는 구조 만들기

 

전체 구성 흐름

이번 자동화 구조는 다음과 같은 흐름으로 구성됩니다.

[견적 요청 목록 시트] → [단가 자동 계산] → [견적서 템플릿 복사] → [고객별 PDF 생성 및 저장]

각 요청은 한 줄의 데이터로 저장되며, 스크립트가 이를 순차적으로 불러와 견적서를 생성하게 됩니다.

요청 목록 시트 구성

먼저 ‘요청목록’이라는 이름의 시트를 만들고, 고객 요청 데이터를 다음과 같이 입력합니다.

고객명 이메일 상품명 수량
김예진 yejin@example.com 머그컵 12
이성훈 sunghoon@example.com 텀블러 30

 

이 목록을 기반으로 각 행별로 단가를 계산하고, 총액을 산출하며, 자동으로 견적서를 분리 생성하게 됩니다.

단가 자동 적용 수식 구성

앞에서 구성한 “단가표” 시트를 활용하여 수량에 따라 단가를 자동 적용합니다. 견적 계산용 열을 추가하고 다음 수식을 입력합니다.

단가 열 수식 예시:

=INDEX(
  FILTER(단가표!C2:C, 단가표!A2:A = C2, 단가표!B2:B <= D2),
  MATCH(
    MAX(FILTER(단가표!B2:B, 단가표!A2:A = C2, 단가표!B2:B <= D2)),
    FILTER(단가표!B2:B, 단가표!A2:A = C2, 단가표!B2:B <= D2),
    0
  )
)

총액 열 수식은 간단히 다음과 같이 작성합니다.

=수량셀 * 단가셀

이로써 한 번의 수식 입력으로 전체 요청 목록의 견적이 자동으로 계산됩니다.

견적서 템플릿 시트 구성

‘견적서양식’ 시트에는 아래와 같은 형태로 견적서 레이아웃을 만들어 둡니다.

항목
고객명 =입력 셀 참조
상품명 =입력 셀 참조
수량 =입력 셀 참조
단가 =입력 셀 참조
총액 =입력 셀 참조

 

스크립트는 요청 목록에서 행을 하나씩 불러와 이 템플릿에 값을 넣고 PDF로 저장하는 방식으로 작동합니다.

앱스 스크립트로 자동 PDF 생성 및 저장

다음은 요청 목록을 읽고, 고객별 견적서를 자동으로 PDF로 저장하는 스크립트 예시입니다.

function generateAllEstimates() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName("요청목록");
  const templateSheet = ss.getSheetByName("견적서양식");
  const folder = DriveApp.getFolderById("폴더ID"); // 저장할 폴더 ID

  const data = dataSheet.getRange(2, 1, dataSheet.getLastRow() - 1, 6).getValues();

  data.forEach((row, i) => {
    const [name, email, product, quantity, unitPrice, total] = row;

    templateSheet.getRange("B2").setValue(name);
    templateSheet.getRange("B3").setValue(product);
    templateSheet.getRange("B4").setValue(quantity);
    templateSheet.getRange("B5").setValue(unitPrice);
    templateSheet.getRange("B6").setValue(total);

    const pdfName = name + "_견적서_" + Utilities.formatDate(new Date(), "GMT+9", "yyyyMMdd");
    const url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/export?format=pdf" +
                "&exportFormat=pdf&gid=" + templateSheet.getSheetId() +
                "&size=A4&portrait=true&fitw=true&sheetnames=false&printtitle=false&pagenum=disable&gridlines=false";

    const options = {
      headers: {
        Authorization: "Bearer " + ScriptApp.getOAuthToken()
      }
    };

    const response = UrlFetchApp.fetch(url, options);
    const blob = response.getBlob().setName(pdfName + ".pdf");

    folder.createFile(blob);
  });
}

 

위 코드를 사용하면 여러 견적 요청을 순차적으로 처리하고, 각 요청에 대한 PDF를 개별 파일로 저장할 수 있습니다.

이메일 발송 기능 추가 확장

앞서 구성한 스크립트에 이메일 발송 기능을 추가하면, 고객에게 자동으로 견적서를 회신할 수 있습니다.

MailApp.sendEmail({
  to: email,
  subject: name + "님 견적서 안내",
  body: name + "님, 요청하신 견적서를 첨부해드립니다.",
  attachments: [blob]
});

 

이 코드를 각 반복문 안에 삽입하면 견적서 생성 → 저장 → 이메일 발송이 연속으로 이루어집니다.

실전 적용 예시

온라인 상품 판매를 하는 셀러가 하루 수십 건의 견적 요청을 처리할 때, 이 자동화 구조를 활용하면 전체 업무 시간을 80% 이상 줄일 수 있습니다. 인쇄소, 디자인 프리랜서, B2B 도매업체 등 단가가 수량에 따라 바뀌는 업종에서 특히 유용하며, 수작업 오류를 줄이고 업무 정확도를 높일 수 있습니다.

결론

여러 건의 견적 요청을 수동으로 처리하다 보면 시간 낭비와 실수가 반복될 수 있습니다. 이번에 소개한 자동화 구조를 활용하면, 스프레드시트 하나로 고객 요청부터 견적 계산, 견적서 생성, PDF 저장, 이메일 발송까지 전 과정을 자동화할 수 있습니다. ERP를 도입하지 않아도, 구글의 기본 도구만으로 업무 효율성과 전문성을 동시에 갖춘 시스템을 구축할 수 있습니다. 반복 업무를 줄이고 시간을 아끼고 싶다면, 지금 바로 자동 견적 시스템을 도입해보시기 바랍니다.