엑셀 자동화가 매주 수작업이 되는 이유#
지점별 파일을 반복해서 합칠 때는 파일마다 시트와 컬럼이 같은지, 합계가 맞는지 확인해야 합니다. 입력 규칙, 병합, 숫자 검증으로 나누어 자동화 방식을 계획할 수 있습니다.
입력 형식과 보존해야 할 기능에 따라 처리 방식을 골라야 합니다.
| 입력·요구사항 | 선택 기준 | 사람의 확인 |
|---|---|---|
.xlsx 값 취합 | 시트명·헤더·금액 단위를 먼저 통일 | 지점별 행 수와 합계 대조 |
| 수식이 있는 통합 문서 | 수식 자체와 저장된 계산값 중 필요한 것 지정 | 계산값의 최신성과 수식 결과 확인 |
.xlsm 매크로 포함 | 매크로 보존 요구와 도구 옵션 확인 | 복사본에서 매크로와 파일 열기 검증 |
| CSV로 내보내기 | 단일 시트의 값 교환이 목적일 때 검토 | 서식 손실과 다른 시트 누락 확인 |
Microsoft의 Excel 형식 안내에 따르면 CSV 저장은 활성 시트만 저장하고 텍스트 형식에서는 서식이 손실됩니다. 예시 도구인 openpyxl 문서는 data_only가 마지막으로 저장된 계산값을 읽는 옵션이며 keep_vba가 VBA 내용을 보존하더라도 편집할 수 있게 하지는 않는다고 설명합니다. 이 도구가 설치되어 있거나 Mirr에 내장되어 있다고 가정하지 않습니다. 출처 확인: 2026-11-01.
- 원본을 백업하고 비식별 샘플로 각 파일의 형식, 시트명, 필수 컬럼, 수식과 매크로 보존 요구를 정합니다.
- Mirr Code에 입력 규칙, 출력 위치, 병합 규칙과 잘못된 파일의 실패 처리를 설명하고 스크립트와 테스트를 요청합니다. 필요한 라이브러리와 실행 권한은 환경에서 별도로 확인합니다.
- 복사본으로 실행한 결과를 원본과 대조해 파일별 행 수·합계·누락을 확인하고, 수식과 매크로가 중요하면 대상 Excel 환경에서도 직접 확인합니다. 기능 구현 가이드는 실행한 검사와 미실행 검사를 구분하도록 안내합니다.
추가 검증 필요: 실제 Mirr 작업의 입력 폴더와 결과 시트는 확보하지 못했습니다.
Before / After: 엑셀 자동화의 현재 비용과 자동화 후 결과#
반복 취합을 스크립트로 옮기더라도 결과가 원본과 일치하는지 확인해야 합니다.
추가 검증 필요: 지점별 실제 파일을 사용한 병합 전후 비교나 시간 절감 측정은 수행하지 않았습니다.
단계별로 하기: 입력 규칙 → 실행 → 검증#
위의 절차에서 입력 형식과 검증 규칙을 정한 뒤 병합 코드와 테스트를 요청하세요.
요청 예시: “각 파일의 매출 시트에서 지점과 금액을 읽어 새 결과 파일로 합치고, 필수 컬럼이 없으면 파일명을 출력하며 중단해 줘. 원본은 수정하지 마.” 시트와 컬럼명은 실제 계약에 맞게 바꾸세요.
검증: 테스트 출력과 체크리스트#
실행할 수 있는 환경을 준비한 뒤 파일별 행 수와 합계, 수식과 매크로의 보존 여부를 확인하세요.
추가 검증 필요: 2026-11-03 「직접 실행한 두 지점의 합성 xlsx 취합」 절의 검사는 새
.xlsx값 취합만 다룹니다. 실제 Mirr 작업, 업무 파일의 오류 입력과 대상 Excel 화면, 수식·매크로 보존은 아직 확인하지 않았습니다.
주의할 점과 한계#
| 증상 | 먼저 확인할 것 | 검증할 결과 |
|---|---|---|
| 지점 파일 누락 | 입력 목록·파일명·시트명과 실패 처리 | 입력 파일별 처리·제외 기록 |
| 합계 불일치 | 금액 단위·중복·빈 셀·헤더 차이 | 파일별 행 수·부분합·전체 합계 |
| 수식 값이 오래됨 | 저장된 계산값인지와 재계산 환경 | 대상 Excel에서 다시 계산한 값 |
| 매크로·도형 손실 | 파일 형식과 사용 도구의 보존 한계 | 복사본을 원래 사용 환경에서 열어 비교 |
위 공식 형식·도구 설명에 따른 점검표이며 실행 결과는 아닙니다. 원본과 고객 데이터는 외부 모델에 전달하기 전에 조직·제공자의 조건을 확인하고 승인된 비식별 샘플로 대체하세요.
도구마다 읽고 저장할 수 있는 항목이 다르므로 필요한 기능을 복사본에서 먼저 확인해야 합니다.
openpyxl은 모든 Excel 요소를 보존하지 못하며 기존 파일을 열어 저장할 때 도형이 유실될 수 있다고 문서에서 경고합니다. 결과를 새 파일로 저장하고, 원본 백업과 대상 환경 검증을 생략하지 마세요.
지점별 통합 문서의 입력 계약 만들기#
월말 취합의 첫 결과물은 병합 스크립트보다 입력 계약이어야 합니다. 파일 확장자, 대상 시트, 헤더 행, 금액 단위, 기간과 지점의 식별 규칙을 적으세요. 지점마다 제목 행을 추가하거나 헤더 이름을 바꾸면 같은 코드가 다른 열을 읽을 수 있습니다. 파일 이름만 보고 해당 월의 자료라고 단정하지 말고 시트 안의 기간 필드와 대조하는 규칙도 정합니다. 계약을 모르는 파일은 조용히 건너뛰지 말고 별도 오류 목록으로 돌려야 담당자가 누락을 찾습니다.
원본은 읽기 전용 입력 폴더에 모으고 결과는 다른 폴더에 두는 방식을 검토하세요. 그렇지 않으면 다음 실행이 지난번 결과 파일까지 입력으로 읽어 합계가 늘어날 수 있습니다. 임시 잠금 파일이나 담당자가 만든 백업 사본을 입력에 포함할지도 명시해야 합니다. 파일명 패턴은 후보를 고르는 조건이고 문서 내용의 정확성을 증명하는 조건은 아닙니다. 대상 파일 목록을 실행 시작 때 확정하고 처리·거부·보류 상태를 파일별로 남기면 나중에 같은 취합을 재현하기 쉽습니다.
| 입력 규칙 | 가상의 월간 매출 계약 | 확인할 오류 |
|---|---|---|
| 대상 파일 | 승인된 입력 목록의 .xlsx 복사본 | 결과 파일·잠금 파일·중복 사본 유입 |
| 대상 시트 | 정확한 이름의 매출 시트 한 개 | 이름 차이·누락·여러 후보 |
| 필수 열 | 지점 코드, 기간, 주문 키, 원 단위 금액 | 헤더 누락·중복·금액 열 혼동 |
| 업무 키 | 지점 코드와 주문 키의 조합 | 파일 사이에 반복된 주문 |
| 빈 값 | 미제출 금액은 오류로 보고 | 영과 빈 셀의 혼동 |
| 결과 범위 | 검증된 행과 별도의 처리 요약 | 일부 성공을 전체 성공처럼 표시 |
이 계약은 특정 회사의 실제 양식을 뜻하지 않습니다. 취소 주문, 세금, 반품과 환율이 있다면 별도 필드와 반올림 시점을 담당자가 정해야 합니다. AI에게 금액의 업무 의미까지 추정시키지 마세요. 이미 합의된 계산 규칙을 코드와 테스트에 옮기는 역할부터 맡기는 편이 검토 범위를 좁힙니다. 규칙을 바꾼 달에는 이전 달의 스크립트와 계약 버전을 함께 남겨 숫자가 달라진 이유를 설명할 수 있어야 합니다.
값 취합과 원본 편집을 다른 작업으로 다루기#
값 취합이 목적이라면 원본의 모든 서식을 보존하며 다시 저장할 필요가 있는지 먼저 묻습니다. 새 통합 문서에 검증된 값만 쓰는 방식은 원본 손상 위험을 줄이지만, 수식·차트·매크로를 옮기지 않는다는 한계가 있습니다. 반대로 원본을 열어 일부 셀만 채우는 작업은 다른 요소의 보존을 확인해야 합니다. 두 작업을 같은 성공 기준으로 평가하면 값은 맞는데 업무 문서가 훼손된 결과를 놓칠 수 있습니다.
openpyxl의 읽기 전용 모드는 큰 파일을 순회할 때 검토할 선택지이지만 모든 기능을 사용할 수 있는 모드는 아닙니다. 공식 문서는 읽기 전용 통합 문서를 명시적으로 닫도록 안내합니다. 사용할 API와 옵션은 설치 버전에서 확인하세요. data_only=True는 Excel이 저장한 계산값을 읽는 선택이며 계산기를 실행하는 옵션이 아닙니다. 계산값이 없거나 오래됐다면 합계를 새로 계산했다고 보고할 수 없습니다. 수식이 필요한 입력인지, 값으로 확정된 입력만 받을지 계약으로 나눕니다.
숫자처럼 보이는 지점 코드도 문자열로 보존할 필요가 있습니다. 앞자리 영이 사라지면 다른 코드와 섞일 수 있기 때문입니다. 날짜도 화면 표시만 보고 문자열로 비교하지 말고 도구가 반환하는 값과 기준 시간대, 기간 의미를 확인하세요. 합계 시트에 사람의 검토용 표시를 넣더라도 계산용 원본 값과 구분하는 편이 좋습니다. 표시 문자열을 다시 숫자로 읽어 집계하는 왕복 처리는 단위와 소수점 해석을 복잡하게 만듭니다.
병합 전에 실패시킬 조건과 검토로 보낼 조건#
필수 시트가 없거나 헤더가 중복된 파일은 어느 열을 읽어야 하는지 정할 수 없으므로 실패시키는 설계를 고려하세요. 선택 메모가 없는 경우까지 전체 취합을 중단할 필요는 없을 수 있습니다. 오류의 심각도는 업무 담당자가 정하고 코드가 그 결정을 일관되게 적용하도록 만듭니다. 제외를 허용한다면 제외 행 수와 금액, 사유가 결과 요약에 드러나야 합니다. 오류를 숨기며 최대한 많은 파일을 합치는 것을 성공 기준으로 삼지 마세요.
중복 주문은 특히 파일 사이에서 검사해야 합니다. 한 파일 안에서는 유일해도 다른 지점의 정정본과 겹칠 수 있습니다. 최신 파일명을 골라 자동으로 덮어쓰는 대신 어느 자료가 정본인지 담당자에게 확인할 근거를 남기세요. 같은 업무 키에 다른 금액이 오면 단순 중복과 정정 충돌을 구분합니다. 행 전체가 같다고 자동 삭제하는 규칙도 실제로 서로 다른 주문일 가능성을 검토해야 합니다. 데이터의 키는 편리한 코드가 아니라 업무에서 합의한 식별 기준입니다.
합계가 맞는 결과를 더 검증하는 순서#
먼저 입력 파일 수와 처리 파일 수를 대조합니다. 다음으로 파일별 유효 행, 제외 행, 빈 행의 정의를 맞추세요. 헤더와 소계가 데이터에 포함되지 않았는지도 봅니다. 그다음 지점별 부분합과 전체 합계를 비교하고 마지막으로 업무 키의 집합이 결과에 그대로 남았는지 확인합니다. 이 순서라면 전체 합계 하나만 보고 끝내는 것보다 누락 원인을 찾기 쉽습니다. 병합 코드가 만든 숫자를 그대로 테스트 기대값으로 재사용하지 않는 것도 중요합니다.
가상의 승인 샘플에 지점 A의 금액 120과 30, 지점 B의 금액 80이 있다면 기대 행 수는 3, 부분합은 A 150과 B 80, 전체 합계는 230으로 사람이 먼저 정할 수 있습니다. 이 숫자는 업무 성과나 실제 회사 매출이 아닙니다. 정상 샘플 외에도 금액 누락, 같은 주문 키 반복, 대상 시트 없음, 수식 셀과 빈 통합 문서를 나눠 시험할 필요가 있습니다. 오류 입력에서 실패해야 한다는 기대도 테스트에 포함하세요.
검사가 실패하면 결과 파일을 배포하지 말고 어느 단계가 실패했는지 알려야 합니다. 원본 읽기 실패, 계약 위반, 숫자 불일치와 출력 저장 실패는 조치가 다릅니다. 출력 저장만 실패했다면 데이터 검증을 무조건 다시 설계할 이유는 없습니다. 반대로 원본 파일이 실행 중 바뀌었다면 앞서 만든 결과가 같은 입력의 결과인지부터 확인해야 합니다. 잠금과 입력 사본을 어떻게 관리할지는 조직의 파일 공유 방식에 맞춰 정합니다.
AI에 전달할 요청을 작게 나누기#
처음 요청에서는 기존 도구와 입력 양식, 수정할 파일 범위만 조사하게 하세요. 다음 요청에서 계약 위반을 찾는 검증기를 제안받고, 사람이 기대값을 확인한 후 병합과 출력 코드를 검토합니다. 예를 들어 필수 열을 빠뜨린 파일을 실패시키는 검사부터 만들면 정상 파일만 읽는 시연보다 업무에서 중요한 결함을 먼저 다룹니다. 기존 저장소에 비슷한 파서나 오류 처리 방식이 있다면 새 구현보다 그것을 재사용할 수 있는지 확인하도록 요청하세요.
검토 요청에는 원본을 수정하지 않을 것, 결과 경로, 오류 보고 형식, 민감정보를 로그에 남기지 않을 것을 함께 적습니다. 다만 요청 문구가 실제 권한 제한을 대신하지는 않습니다. 파일 시스템 권한과 실행 환경을 따로 설정하고 외부 전송이 허용된 샘플만 사용해야 합니다. 결과 검토자는 스크립트가 실행됐다는 사실과 결과가 업무적으로 옳다는 판단을 분리합니다. 자동화 코드를 작성한 모델이 스스로 합격을 선언하도록 끝내지 마세요.
월별 반복 실행과 인수인계#
실행마다 입력 목록, 계약 버전, Python과 라이브러리 버전, 명령, 검사 결과를 보관합니다. 개인정보가 있는 셀 내용 대신 파일 식별자와 오류 위치로 조사할 수 있는지 검토하세요. 새 계약이 적용된 달에는 이전 형식의 파일을 허용할지 명시하고, 호환 코드를 추가했다면 그 분기도 시험합니다. 무조건 열 이름의 공백을 지우거나 비슷한 이름을 자동 매칭하면 다른 열을 읽는 오류를 숨길 수 있습니다. 허용하는 별칭만 명시적으로 관리하는 편이 변경을 설명하기 쉽습니다.
정기 실행을 붙이는 작업은 병합 스크립트 완성과 별도입니다. 실행 계정의 읽기·쓰기 범위, 중복 실행 방지, 실패 알림과 결과 보존을 검토해야 합니다. 이 글은 실제 CI나 업무 스케줄러 실행을 증명하지 않습니다. 매크로·차트·도형과 Excel 화면 검증도 값만 다루는 합성 테스트로 대체할 수 없습니다. 업무에 도입할 때는 해당 환경의 입력 폴더·결과 시트 화면, 병합 명령과 행 수·합계 검증을 별도로 확보해야 합니다. 실제 사용한 업무 파일과 그 결과를 연결할 수 있어야 합니다.
추가 근거: openpyxl 읽기 전용 모드, 통합 문서 읽기 옵션. 옵션 설명은 라이브러리 동작의 근거이며 Mirr 내장 기능이나 업무 파일 보존의 증거는 아닙니다.
직접 실행한 두 지점의 합성 xlsx 취합#
2026-11-03에 이미 설치된 Python 3.13.9와 openpyxl 3.1.5를 사용해 두 개의 새 .xlsx를 만들고 값을 취합했습니다. 실제 Excel 앱과 Mirr는 실행하지 않았습니다. A 파일에는 A1·A2 주문의 금액 120과 30, B 파일에는 B1 주문의 금액 80을 넣었습니다. 각 파일의 매출 시트 헤더는 id, branch, amount입니다. 읽기는 read_only=True, data_only=False로 수행하고 통합 문서를 닫았습니다.
실행한 검사에서는 입력 파일의 SHA-256을 읽기 전후에 비교하고 결과를 별도의 merged.xlsx에 저장한 뒤 다시 읽었습니다. 원본 파일을 열어 같은 이름으로 저장하는 흐름은 사용하지 않았습니다. 사람이 정한 기대 행 수와 부분합, 전체 합계를 assertion으로 확인했습니다. 실제 출력은 다음과 같습니다.
excel:merge: files=2 rows=3 A=150 B=80 total=230 inputs_unchanged=True
excel:formula: formula==1+2 cached_value=None (not recalculated)
둘째 줄은 별도의 새 통합 문서에 =1+2 수식만 저장한 실험입니다. 수식으로 읽으면 해당 문자열이 남고 data_only=True로 읽은 캐시 값은 None이었습니다. 이 환경에서 openpyxl이 새 계산값을 만들지 않았다는 관찰이며 기존 모든 Excel 파일의 캐시가 비어 있다는 주장이 아닙니다. Excel에서 계산한 파일과 비교하거나 실제 Excel 화면을 검사하지 않았습니다.
소스는 2026-11-03 합성 예제 스크립트입니다. 실행 기록에는 명령, 환경과 입력·결과 파일 해시가 있습니다. 실행은 새 디렉터리를 요구하며 기존 결과를 덮어쓰지 않습니다. 이 예제에는 매크로, 차트, 도형, 외부 연결과 복잡한 수식이 없습니다. 따라서 업무 양식 보존이나 Mirr 내장 병합 기능을 입증하지 않습니다. 실제 업무에 적용하려면 입력 폴더·결과 시트 화면, Mirr 작업과 오류 파일의 처리도 별도로 검증해야 합니다.
이 결과를 업무 설계에 사용할 때는 정상 값 취합과 원본 보존을 분리한 구조만 참고하세요. 실제 양식의 헤더 차이, 중복 주문과 금액 누락은 각 계약으로 추가 검사해야 합니다. 합성 자료의 세 행이 맞았다고 수십 개 지점의 모든 입력이 맞는다는 뜻은 아닙니다. 계산값이 중요한 경우에는 계산 환경과 저장 시점까지 검증 범위에 넣어야 합니다.
기록된 검사는 입력 파일의 시트 목록과 헤더를 정확히 비교했고, 출력 파일에서는 이름이 결과인 시트를 열어 헤더를 제외한 데이터 행을 기대값과 비교했습니다. 출력 헤더를 비교하거나 출력 시트가 하나뿐인지 확인하는 assertion은 수행하지 않았습니다. 현재 파일에 올바른 헤더가 있다는 사실을 그 검사까지 실행한 증거로 바꾸지 않습니다. 실제 업무에서는 결과 시트에 소계나 검토용 열을 추가할 수 있으므로 그 행을 데이터로 다시 집계하지 않도록 출력 계약을 정해야 합니다. 입력과 출력 폴더를 나누는 규칙과 함께 다음 실행이 결과 파일을 새 입력으로 읽지 않는지도 확인하세요. 이 조건은 파일명 패턴과 입력 목록 검사로 명시적으로 다루는 편이 좋습니다.
연결과 기본 옵션을 입력 파일로 확인하기#
openpyxl의 ExcelReader는 keep_links 옵션을 받고 기본값은 True입니다(openpyxl 리더 문서). 기본값이 연결을 어떻게 남기는지는 실제 파일로 확인하고, 결과 파일에서 같은 연결이 남았는지 비교하세요.
다음에 읽을 것#
단일 시트의 값 교환이 목적이라면 CSV의 입력 규칙도 살펴보세요.
CSV 리포트 자동화에서는 헤더와 집계 규칙을 먼저 정하는 방법을 살펴봅니다.
관련#
편집 메모 (2026-11-02): 계산값·CSV·도구 의존성 FAQ와 오류 진단표를 보충했습니다. 이후 2026-11-03의 독립 로컬 예제에는 새 XLSX 값 취합 명령, 행 수·부분합·전체 합계 assertion과 출력 데이터 행 비교가 추가됐습니다. 실제 Mirr·업무 파일의 병합, 오류 입력과 입력 폴더·결과 시트 화면, Excel 재계산·수식·매크로·도형·시각적 보존은 여전히 확인하지 않았습니다. 로컬 예제의 출력 헤더 비교도 기록된 검사에는 없습니다.
