코덱스로 엑셀 보고서 만드는 프롬프트 매뉴얼
거래 내역 15행에서 유효 거래 10행과 검토 대상 5행을 분리했다. 반품을 빼고 중복을 제외한 매출 합계는 190만원이며, 충돌한 거래는 임의로 한쪽을 선택하지 않았다.

- 원본을 보존하고 정상 거래·검토 대상·요약을 다른 시트에 둔다.
- 반품, 완전 중복, 같은 ID의 금액 충돌을 각각 다른 규칙으로 처리한다.
- 결과 파일은 합계뿐 아니라 어떤 행이 빠졌는지도 설명해야 한다.
완성 엑셀에는 네 개의 시트가 있다
이번 예제는 가상 거래 15행을 Codex로 취합한 보고서다. 입력 CSV, 완성 XLSX, 검사 결과를 함께 볼 수 있다.
| 시트 | 담은 내용 | 필요한 이유 |
|---|---|---|
| 원본 | 입력 15행 | 합계가 달라졌을 때 원래 자료로 돌아가기 |
| 유효거래 | 집계한 10행·판매는 양수, 반품은 음수로 바꾼 값·검산 수식 | 실제로 계산한 거래 확인 |
| 검토 | 제외·보류 5행과 사유 | 누락·충돌을 감추지 않기 |
| 월별요약 | 월별·채널별 계산값 | 보고할 합계 확인 |
‘엑셀을 분석해서 보고서를 만들어라’보다 이 네 부분을 먼저 요구해야 결과를 추적하기 쉽다. 잘못된 날짜를 정상 날짜로 고치거나 빈 금액을 0원으로 채우면 합계는 나와도 원본의 문제는 사라진다.
1. 계산 기준부터 적는다
샘플의 열은 거래 ID, 날짜, 채널, 유형, 금액이다. 금액은 정수 원 단위이며 반품도 양수로 입력돼 있다. 따라서 반품을 뺄지는 별도 규칙으로 지정해야 한다.
| 상황 | 이번 예제의 처리 |
|---|---|
| 판매 | 금액을 더한다 |
| 반품 | 금액을 뺀다 |
| 모든 값이 같은 거래 ID 중복 | 한 행만 계산하고 나머지는 검토 시트로 보낸다 |
| 같은 ID인데 금액 등 값이 다름 | 해당 ID의 모든 행을 보류한다 |
| 금액이 비어 있음 | 0원으로 채우지 않는다 |
| 존재하지 않는 날짜 | 정상 날짜를 추정하지 않는다 |
특히 ‘중복 제거’라고만 쓰면 값이 충돌하는 두 행 중 첫 번째만 남길 수 있다. 이번 예제에서는 T013의 8만원·9만원 두 행을 모두 보류했다. 어느 값이 맞는지는 원 거래를 확인해야 결정할 수 있기 때문이다.
2. 입력·처리·검산을 한 요청에 넣는다
Codex에서 샘플이 들어 있는 작업 폴더를 열고 아래 조건으로 요청한다. 파일이 여러 개라면 먼저 열 이름과 파일별 날짜 범위가 같은지도 살피게 한다.
[거래 파일]로 월별·채널별 매출 보고서 XLSX를 만들어라.
원본은 수정하지 말고 원본·유효거래·검토·월별요약 시트를 분리해라.
금액은 원 단위다. 판매는 더하고 반품은 빼라.
유효거래의 금액은 문자열이 아니라 숫자형 셀로 저장해라.
완전히 같은 거래 ID 중복은 한 행만 계산해라.
같은 ID인데 값이 다르면 해당 ID의 모든 행을 보류해라.
금액 누락과 잘못된 날짜는 추정하거나 0원으로 채우지 마라.
요약은 계산값으로 저장하고 유효거래에는 판매를 더하고 반품을 빼는 검산 수식도 남겨라.
원본 행 수=유효 행 수+검토 행 수인지 확인해라.
월별 합계와 채널별 합계를 독립적으로 더해 전체 합계와 대조해라.
output/report.xlsx와 output/check.json을 만들고 제외 사유를 설명해라.
기존 엑셀에 덮어쓰는 대신 새 파일을 만든다. 예제의 작업은 로컬 파일 생성이며 구글 시트나 회사 시스템에 연결하지 않는다. 실제 회사 파일을 쓸 때는 어떤 열까지 작업에 제공할지 먼저 정한다.
국내에도 Codex로 월별 원본과 보고서 다운로드를 연결한 구매 분석 사례가 있다. 그 사례는 수치 표시와 실제 계산값의 차이까지 다뤘다. 이 예제는 웹 서비스 구축 대신 로컬 XLSX 한 개와 검산에 범위를 좁혔다. 월간 구매 보고 사례
3. 결과의 190만원을 직접 대조한다
유효 거래의 월별 합계는 다음과 같다.
| 월 | 온라인 | 오프라인 | 합계 |
|---|---|---|---|
| 7월 | 25만원 | 20만원 | 45만원 |
| 8월 | 30만원 | 25만원 | 55만원 |
| 9월 | 60만원 | 30만원 | 90만원 |
| 합계 | 115만원 | 75만원 | 190만원 |
7월의 온라인 매출은 30만원 판매에서 5만원 반품을 뺀 25만원이다. 9월의 T010 15만원 판매는 같은 행이 두 번 있지만 한 번만 더했다. T013의 충돌한 금액은 9월 매출에 넣지 않았다.
15행 가운데 유효 거래가 10행이고 검토 대상이 5행이다. 검토 대상은 완전 중복 1행, 금액 누락 1행, 잘못된 날짜 1행, 거래 ID 충돌 2행이다. 합계만 보는 대신 이 행 수가 서로 맞는지 확인한다.
이번 제작 중에는 검사 코드에 기대 합계를 195만원으로 잘못 적어 첫 실행이 실패했다. 원본을 다시 더해 45+55+90=190만원임을 확인하고 기대값을 고쳤다. 오류 메시지가 나왔다고 보고서를 곧바로 고치면 오히려 정확한 결과를 잘못된 검사에 맞출 수 있다.
4. 수식이 들어 있다는 말과 계산됐다는 말을 구별한다
유효거래 시트에는 판매 금액을 더하고 반품 금액을 빼는 수식을 넣었다. 동시에 보고할 요약에는 Python으로 계산한 숫자를 저장했다. 이 때문에 수식을 아직 실행하지 않은 뷰어에서도 요약값을 볼 수 있다.
파일 제작에 사용한 openpyxl은 수식을 기록하지만 직접 계산하지 않는다. 수식이 있는 XLSX를 저장했다고 Excel의 계산 엔진까지 실행된 것은 아니다. 수식 공식 문서
그래서 완성 파일의 복사본을 LibreOffice Calc에서 열어 다시 계산했다. 처음에는 CSV에서 읽은 금액이 문자열로 저장돼 판매 수식의 결과도 문자로 남았다. 유효거래 시트의 금액을 숫자형 셀로 저장하도록 고친 뒤 다시 실행했다.
재검사에서 10개 수식 결과가 저장한 계산값과 모두 일치했고, 합계도 190만원이었다. 재계산 검사 결과에 계산 엔진과 검증 범위를 남겼다. Microsoft Excel 앱에서의 별도 검사는 하지 않았다.
파일을 연 뒤 수식의 결과와 저장된 계산값이 일치하는지 보고, 거래 금액을 수정한다면 보고서도 다시 생성한다. 값으로 저장한 월별요약은 원본 수정만으로 자동 갱신되는 시트가 아니다.
완성 파일을 다시 검사해라.
금액 한 건을 0원으로 바꾸거나 누락을 채우지 말고 원본 상태로 읽어라.
유효거래의 판매·반품을 직접 합산한 값과 월별요약을 대조해라.
수식이 들어 있는지 확인한 검사와 실제 계산 엔진을 실행한 검사를 구분해서 보고해라.
다음 달 자료에는 확인된 규칙을 재사용한다
다음 달 파일을 넣기 전에 열 이름, 거래 ID의 범위, 반품 금액의 부호가 그대로인지 본다. 한 달 안에서만 고유한 ID라면 월을 포함한 키를 사용해야 다른 달의 정상 거래가 중복으로 빠지지 않는다.
검토 대상을 원본 확인 후 수정하고 새 버전으로 다시 실행한다. 원본과 검토 기록을 지우지 않는다. 재사용할 부분은 이번 합계 190만원이 아니라 거래를 포함하거나 보류하는 기준과 그 결과를 확인하는 방법이다.