재무제표 원표 조정 (서식 유지 · 연결 관계 유지)
트리거 조건
- 사용자가 기존 재무제표(대차대조표/손익계산서/현금흐름표, 주로 .xls 구형식)를 보내며, 「특정 숫자를 목표값으로 바꾸고, 다른 데이터는 자동 조정」해 달라고 요청
- 명시적으로 「기존 표에서 수정할 것」「서식/디자인/다른 시트는 전혀 건드리지 말 것」을 요구
- 미처분이익, 총이익, 순이익 등 연결 관계 조정이 수반됨
사용자 철칙
- 절대 기존 표를 바탕으로 새 표를 만들지 않는다 — 기존 표 위에서 수정하며, 서식/디자인/다른 시트는 완전히 그대로 둔다
- 변경이 필요한 숫자 셀만 수정하며, 나머지는 하나도 건드리지 않는다
- 수정 후 반드시 연결 관계가 자체 모순되지 않도록 보장한다:
자산 총계 = 부채 총계 + 자본 총계기말 미처분이익 − 기초 미처분이익 = 누적 총이익순이익 = 총이익 − 법인세
- 인도 전에 반드시 프로그램으로 균형을 검증하며, 육안 검사는 금지
기술 선택 (환경에 따라)
방법 A: Excel COM (Windows + Office, 100% 충실도)
.xls 구형식이나 병합 셀/테두리/수식이 있는 복잡한 표에 적합:
import win32com.client, shutil
SRC, OUT = '원본.xls', '조정판.xls'
shutil.copy2(SRC, OUT) # 원본 손대지 않음
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False; excel.DisplayAlerts = False
try:
wb = excel.Workbooks.Open(OUT)
ws = wb.Sheets('대차대조표')
ws.Cells(행, 열).Value = 목표값 # 대상 셀만 수정
wb.Application.Calculate(); wb.Save(); wb.Close(True)
finally:
excel.Quit()
방법 B: openpyxl (크로스 플랫폼, .xlsx)
서식은 잘 유지되지만 수식에 주의 — openpyxl은 수식 계산 결과(캐시 값)를 읽지 못합니다. 셀에 수식이 있으면 수식을 유지하고 덮어쓰지 마십시오:
import openpyxl
wb = openpyxl.load_workbook(OUT) # 주의: data_only=False로 수식 읽기
ws = wb['대차대조표']
ws.cell(행, 열).value = 목표값
wb.save(OUT)
방법 C: xlrd 읽기 + 방법 A/B 쓰기
구형 .xls는 xlrd로 먼저 스캔하여 위치를 찾고(읽기 전용), 실제 수정은 COM을 거치거나 xlsx로 변환하여 처리
치명적인 함정: 먼저 스캔하여 위치를 찾아라. 행/열 번호를 추측하지 마라
구식 재무제표는 흔히 좌우 이단 배열로, 계정과목 위치가 직관적이지 않음:
- 대차대조표: 자산은 왼쪽(A
D열), 부채+자본은 오른쪽(EH열). 「미처분이익」 레이블은 오른쪽 E열에 있고, 숫자는 G/H열 — 왼쪽 C/D열이 아님! - 0-인덱스(xlrd)와 1-인덱스(COM/openpyxl 대부분 API)를 혼용하면 엉뚱한 셀을 수정하게 됨
- 올바른 방법: 먼저 계정과목명으로 행을 스캔하여 위치를 찾고, 그 다음 목표 열을 수정:
for r in range(1, 60):
label = str(ws.Cells(r, 1).Value or '') + str(ws.Cells(r, 5).Value or '')
if '미처분이익' in label:
ws.Cells(r, 7).Value = 기말 목표 # 오른쪽 G열
ws.Cells(r, 8).Value = 기초 목표 # 오른쪽 H열
break
연결 조정 로직 (「미처분이익 조정」 예시, 검증 완료)
목표: 기말 미처분이익=X, 기초 미처분이익=Y.
조정 단계:
- 미처분이익(오른쪽 열)을 목표값으로 변경
- 자산 측에 「기타 미수금」을 동일 금액만큼 반대 방향으로 조정하여 균형 유지 — 자본 변동 시 자산이 불변하면 부채가 불균형해짐:
- 기타 미수금 기말 += (신규 기말 미처분 − 원래 기말 미처분)
- 기타 미수금 기초 += (신규 기초 미처분 − 원래 기초 미처분)
- 유동자산 합계, 자산 합계(왼쪽 열)를 조정된 값으로 변경
- 자본 합계, 부채+자본 합계(오른쪽 열)를 조정된 값으로 변경
- 손익계산서: 영업수익 누적 += (목표 누적 이익 − 원래 누적 이익); 영업이익/총이익/순이익 연동 업데이트
- 현금흐름표는 일반적으로 건드리지 않음 (실제 현금 수반 없는 손익 조정)
⚠️ 합계 행에 수식이 없을 수 있음(순수 숫자) — .Formula를 확인하여 숫자가 반환되면 =SUM(...)이 아닌 것이므로, 합계 행을 수동으로 조정된 값으로 변경해야 함; 세부 항목을 변경해도 자동 연동되지 않음
검증 (인도 전 필수, 프로그래밍 방식)
# 다시 읽어 검증 (쓰기와 동일한 엔진 사용)
assert abs(자산 합계 − (부채 + 자본)) < 0.01
assert abs(누적 총이익 − (기말 미처분 − 기초 미처분)) < 0.01
assert abs(당기 총이익 − 목표) < 0.01
print('✓ 세 표 연결 검증 통과')
품질 자가 점검
- 기존 표 위에서 수정했는가(새로 만들지 않음)? 서식이 원본 그대로인가?
- 변경이 필요한 셀만 수정했는가?
- 세 표의 연결 관계가 프로그램 검증을 통과했는가?
- 원본 파일이 백업되었는가?
규정 준수 주의사항
조정된 재무제표를 대출/세무/감사 등 외부 용도로 사용하려면 실제 조정 증빙이 뒷받침되어야 함; 내부 관리용으로만 사용하는 것은 문제 없음. 사용자가 조정된 재무제표로 사기를 시도할 의도가 있다고 판단되면, 규정 준수 위험을 경고하고 조작을 거부해야 함.
🙋 작성자 정보
九品錦锂e | 겪었던 시행착오를