Excel Agent는 “엑셀 분석기”보다 먼저 “정형 산출물 자동화 엔진”이어야 한다.

회의 랩업에서 정리된 실제 니즈는 사용자가 ERP 또는 사내 시스템 데이터를 가져와 “이 양식처럼 엑셀 뽑아줘”라고 요청하면, 미리 등록된 task가 데이터를 전처리하고 template schema에 맞춰 값을 꽂은 뒤 read-only preview, 확인·수정, 다운로드까지 제공하는 흐름이다.

이번 실험의 판정: LLM이 raw Excel을 원큐에 마법처럼 이해하는 방식은 불충분하다. 다만 SheetJS가 추출한 workbook metadata, header profile, formula/value/sourceAddress 관계를 task 등록 시점에 확정하면, agent가 데이터를 원본 Excel template에 정확히 되삽입할 수 있다.

1. 사용자가 기대하는 정형 업무 자동화 흐름

자유형 Excel Q&A와 정형 산출물 생성은 다른 제품이다. 아래 흐름은 후자에 맞춘다.

2. 어떤 가설로 Excel 이해 가능성을 검증했나

H1 실패

Raw parse만으로 table 이해 가능

SheetJS cell grid만 보고 자동 탐지하면 File 3을 131 rows / 9,835 values로 본다.

문제: used range, hidden/outline, filter, 현재 view, formula provenance를 품질 기준에 넣지 않음.

H2 부분 실패

AutoFilter range가 실제 분석 table

File 3의 autoFilter는 A5:CZ197이다. 하지만 value range E:CZ는 전부 hidden block이다.

결론: filter는 중요한 메타지만, 단독 extraction scope가 되면 현재 FY2026 영역을 놓친다.

H3 성공

Profile-aware full table 분석

Sheet profile로 header rows 3~5, data row 6~, dimension A:D, value E:JM를 확정했다.

결과: 210 rows / 269 value columns / 25,411 non-null values / 7,350 formula cells.

H4 가능

Template schema 등록 후 값 주입

각 long row가 sourceAddress를 들고 있으므로, 업무 fact를 cell patch로 바꿔 원본 양식에 다시 넣을 수 있다.

단, LLM은 주소 계산자가 아니라 mapping 후보 설명·확인 질문 생성자로 제한해야 한다.

3. File 3에서 실제로 파악한 Excel 표면

OOO부문,OOO부문 (F)used range A1:JM230 · freeze E16 · filter A5:CZ197
A
부문
B
C
세부
D
항목
FS
visible
FT/FU
formula
IB
visible
JM
used end
OOO부문
-
-
매 출 액
FY2026 4월 전추정
FS6 = 1005.7679
FY2026 4월 실적/차이
FT6 = +FT12+FT30
FY2026 1분기 전년
IB6 = +IB12+IB30
빈 사용 범위 포함
OOO부문
OOO서비스팀
대외
GPM
header forward-fill 필요
수식 보존 대상
분기 집계 영역
주소 보존
210
data rows
269
value columns E:JM
56,490
addressable cells
25,411
non-null values
7,350
formula cells

4. SheetJS 기반으로 관계정보를 어떻게 만든다

Workbook meta
sheet list, used range, autoFilter, hidden/outline columns
deterministic
Template profile
header rows, data start row, dimension columns, value columns
LLM 후보 + 사용자 확정
Header model
FY / 기간 / 유형을 row-wise forward-fill해서 의미 label 생성
deterministic
Long fact table
각 원본 cell을 sourceAddress가 있는 행으로 unpivot
deterministic
Reverse patch map
업무 fact 조건을 원본 cell address로 되돌리는 map
registry schema

원본 cell에서 normalized row로 바뀌는 예

rawCell = {
  address: "FS6",
  v: 1005.7679479999999,
  f: null,
  hidden: false
}

normalizedRow = {
  sourceAddress: "FS6",
  dimensions: {
    division: "OOO부문",
    team: null,
    item: "매 출 액"
  },
  header: {
    fiscalYear: "FY2026",
    period: "4월",
    valueType: "전추정"
  },
  value: 1005.7679479999999
}

5. Task 등록 시 저장해야 하는 schema

Agent Admin을 플랫폼으로 키우지 않고 1차 Registry 수준으로 자르려면, 코드 배포가 아니라 “업무 task와 template mapping contract”를 등록하는 구조가 현실적이다.

REGTask Registry record

task_id
pnl_estimate_q1_2026
router_phrases
“손익 뽑아줘”, “OOO 양식처럼”, “1분기 추정손익”
input_schema
ERP/SEP에서 넘어오는 column, 타입, 기간, 조직 코드
template_profile
sheet, header rows, dimension columns, value range, hidden/filter 정책
mapping_rules
fact 조건 → Excel sourceAddress 또는 address range
confirmation_policy
LLM이 사용자에게 확인해야 할 누락/충돌/예외 질문

MAPMapping rule 예시

when {
  item: "매 출 액",
  fiscalYear: "FY2026",
  period: "4월",
  valueType: "전추정",
  division: "OOO부문"
}
then {
  targetAddress: "FS6",
  editable: true,
  preserveStyle: true,
  preserveFormula: false
}

6. 데이터를 넣으면 Excel 결과물이 어떻게 나온다

단계처리책임
1ERP/SEP rows를 task input schema로 parsePreprocessor
2조직/기간/지표명을 업무 fact로 정규화Task logic
3mapping rule로 fact → sourceAddress 찾기Mapping engine
4원본 workbook copy의 cell.v만 patchSheetJS writer
5수식, 스타일, 필터, hidden, 병합 구조 보존Template
6Excel/LibreOffice/뷰어에서 재계산·read-only previewRenderer

Cell patch output

patches = [
  {
    address: "FS6",
    oldValue: 1005.7679,
    newValue: 1200.0,
    reason: "ERP 4월 전추정 매출액"
  },
  {
    address: "FS7",
    oldValue: 90.7634,
    newValue: 110.2,
    reason: "ERP 4월 전추정 매출이익"
  }
]

preserved = [
  "FT6 formula +FT12+FT30",
  "FU6 formula FT6-FS6",
  "number formats and hidden columns"
]

7. 사용자 확인 스텝은 이렇게 보인다

ERP 데이터로 2026년 1분기 추정손익을 OO, OO 양식처럼 뽑아줘.
등록된 task pnl_estimate_q1_2026로 라우팅했습니다. 입력 데이터의 기간은 2026년 4월 기준, 대상 조직은 OOO부문과 AAA부문으로 해석됩니다.
확인 필요: ERP 데이터에 “전추정”과 “계획”이 모두 있습니다. FS/FZ/GA 계열에는 전추정/추정 값을 넣고, FT/FU 등 수식 셀은 보존합니다.
미리보기에서 25,411개 값 후보 중 task mapping 대상 642개 cell을 채웠습니다. 표시된 변경 영역만 수정 가능하고 나머지는 read-only입니다. 이 기준으로 생성할까요?

8. LLM이 하는 일과 하면 안 되는 일

LLM 역할: 사용자 요청을 task로 라우팅, 누락/충돌 질문 생성, mapping 후보 설명, preview 요약, 수정 의도 해석.

Parser/engine 역할: cell address, formula, hidden/filter, header forward-fill, count 검증, patch 적용. 숫자 계산과 주소 결정은 deterministic하게 처리.

금지: LLM이 raw Excel screenshot만 보고 직접 “아마 FS6일 것”이라고 추정해서 값을 쓰는 방식. 이 방식은 검증·재현·감사가 불가능하다.

9. 그래서 “LLM이 엑셀을 파악하는 게 되는가?”에 대한 판정

YES등록형 task에서는 가능

LLM이 template profile, sample rows, sourceAddress map, 업무 용어 사전을 입력으로 받으면 어떤 데이터가 어느 영역에 들어가야 하는지 설명하고 확인 질문을 만들 수 있다.

COND원큐 자유형은 불안정

필터 범위, 숨김 열, freeze pane, formula provenance가 얽힌 Excel은 raw parse만으로 정확히 이해하기 어렵다. 사용자 확인 또는 등록 프로파일이 필요하다.

PLAN제품화 방향

1차는 업무 N개를 registry에 등록하고, 각 task마다 input schema와 template mapping schema를 확정한다. 자유형 Excel 분석은 보조 기능으로 분리한다.