엑셀 자동화, 코드 없이 데이터 정리하는 n8n 예제 9가지
엑셀 자동화를 검색해 왔다면 반복적으로 표를 옮기거나 형식을 맞추는 작업 때문일 겁니다. n8n은 여러 앱과 API를 코드 없이 연결해 자동으로 돌아가게 해주는 도구입니다.
자동 재생 · 눌러서 해당 항목으로 · 전부 한 zip
- 01 JSON을 CSV 파일로
- 02 CSV 파일을 JSON 행으로
- 03 중첩 JSON 평탄화
- 04 배열 필드를 행으로 쪼개기
- 05 여러 아이템을 배열 하나로
- 06 필드 이름 한 번에 바꾸기
- 07 문자열·날짜 정리
- 08 시각만 빼고 중복 제거
- 09 카테고리별 묶어서 합계
아홉 개는 데이터가 실제로 겪는 순서대로 놓았습니다. 먼저 파일 자체를 바꾸는 두 가지(01 JSON을 CSV로·02 CSV를 JSON으로)로 시작해, 구조를 다시 짜는 세 가지(03 평탄화·04 쪼개기·05 합치기)로 넘어가고, 이름과 값을 정리하는 두 가지(06 필드명·07 문자열·날짜)를 지나, 마지막으로 골라내고 묶는 두 가지(08 중복 제거·09 그룹 합계)로 끝납니다. 실제 사무 업무도 대개 이 순서로 흘러갑니다 — 형식을 맞추고, 구조를 바꾸고, 정리하고, 추려서 합칩니다.
01JSON을 CSV 파일로
Code가 제품 6줄을 만들고 Convert to File이 그걸 실제 CSV 바이너리 파일로 묶습니다. 이 노드는 결과를 json이 아니라 binary에만 담기 때문에, 뒤에 Code를 하나 더 달아 파일 이름과 크기를 다시 읽어와 변환이 됐는지 확인합니다. 다운로드용 리포트를 만들거나 이메일 첨부 파일로 보낼 때 이런 식으로 씁니다.
{
"name": "Build CSV File",
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"parameters": {
"operation": "csv",
"binaryPropertyName": "data",
"options": {
"fileName": "products.csv",
"headerRow": true
}
}
}
02CSV 파일을 JSON 행으로
HTTP Request가 공개 CSV 파일을 바이너리로 받아오고 Extract from File이 각 행을 JSON 아이템으로 풀어냅니다. Limit이 앞 5개만 남겨 결과를 짧게 줄입니다. 외부에서 받은 CSV를 워크플로 데이터로 바꾸거나 스프레드시트 가져오기를 할 때 이 조합을 씁니다.
{
"name": "Parse CSV Rows",
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1.1,
"parameters": {
"operation": "csv",
"binaryPropertyName": "data",
"options": {
"headerRow": true
}
}
}
03중첩 JSON 평탄화
Code가 주소와 좌표까지 두 단계로 중첩된 고객 데이터를 만들고, 두 번째 Code가 재귀 함수로 address.city처럼 점 표기 키 하나짜리 평평한 객체로 풀어냅니다. 중첩된 API 응답을 스프레드시트에 넣기 전 정리하거나 폼 데이터 평탄화가 필요할 때 이렇게 풉니다.
{
"name": "Flatten Record",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"parameters": {
"jsCode": "function flatten(obj, prefix, out) {\n prefix = prefix || '';\n out = out || {};\n for (const [k, v] of Object.entries(obj)) {\n const key = prefix ? prefix + '.' + k : k;\n if (v && typeof v === 'object' && !Array.isArray(v)) {\n flatten(v, key, out);\n } else {\n out[key] = v;\n }\n }\n return out;\n}\nconst record = $input.first().json;\nreturn [{ json: flatten(record) }];"
}
}
04배열 필드를 행으로 쪼개기
Code가 품목 배열이 든 주문 한 건을 만들고 Split Out이 그 배열을 펼쳐 품목마다 독립된 아이템으로 나눕니다. 주문 한 건의 품목을 각각 처리하거나 인보이스 줄 분리가 필요할 때 씁니다.
{
"name": "Split Line Items",
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"parameters": {
"fieldToSplitOut": "lineItems",
"include": "noOtherFields",
"options": {}
}
}
05여러 아이템을 배열 하나로
Code가 로그 8줄을 아이템 8개로 만들고 Aggregate의 Aggregate All Item Data가 그 전부를 logs 필드 하나의 배열로 묶어 아이템 1개로 돌려줍니다. 로그를 파일 하나로 묶어 보내기가 필요하거나 요약 보고서의 원본 배열을 만들어야 할 때 이 노드를 씁니다.
{
"name": "Combine Into List",
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"parameters": {
"aggregate": "aggregateAllItemData",
"destinationFieldName": "logs",
"options": {}
}
}
06필드 이름 한 번에 바꾸기
Code가 usr_nm·usr_em·ord_amt처럼 레거시 이름을 쓰는 행을 만들고 Rename Keys가 그 셋을 name·email·amount로 한 번에 바꿉니다. 레거시 API 필드명을 우리 쪽 이름으로 맞추거나 스프레드시트 열 이름 통일이 필요할 때 씁니다.
{
"name": "Rename To Our Schema",
"type": "n8n-nodes-base.renameKeys",
"typeVersion": 1,
"parameters": {
"keys": {
"key": [
{ "currentKey": "usr_nm", "newKey": "name" },
{ "currentKey": "usr_em", "newKey": "email" },
{ "currentKey": "ord_amt", "newKey": "amount" }
]
}
}
}
07문자열·날짜 정리
Code가 공백과 대소문자가 뒤섞이고 날짜 형식도 세 가지로 제각각인 데이터를 만들고, 두 번째 Code가 이름을 다듬고 날짜를 YYYY-MM-DD 하나로 맞춥니다. 폼 입력 정리나 서로 다른 날짜 포맷 통일이 필요할 때 이 조합을 씁니다.
{
"name": "Clean Records",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"parameters": {
"jsCode": "function toTitleCase(s) {\n return s.trim().replace(/\\s+/g, ' ').toLowerCase().replace(/\\b\\w/g, c => c.toUpperCase());\n}\nfunction toDateOnly(raw) {\n const d = new Date(raw);\n return d.toISOString().slice(0, 10);\n}\nreturn $input.all().map(item => ({\n json: {\n name: toTitleCase(item.json.name),\n email: item.json.email.trim().toLowerCase(),\n date: toDateOnly(item.json.raw_date)\n }\n}));"
}
}
08시각만 빼고 중복 제거
Code가 같은 고객·상품인데 조회 시각만 다른 행을 섞어 만들고 Remove Duplicates가 seenAt만 비교에서 빼고 나머지 필드로 중복을 지웁니다. 같은 이벤트가 시각만 다르게 여러 번 들어올 때 이렇게 걸러내며, 로그 중복 정리에도 그대로 씁니다.
{
"name": "Dedupe Ignoring seenAt",
"type": "n8n-nodes-base.removeDuplicates",
"typeVersion": 2,
"parameters": {
"compare": "allFieldsExcept",
"fieldsToExclude": "seenAt"
}
}
09카테고리별 묶어서 합계
Code가 주문 12건을 만들고 Summarize가 category로 묶어 amount 합계와 건수를 낸 뒤 카테고리마다 아이템 1개로 돌려줍니다. 매출 카테고리별 집계를 내거나 대시보드용 그룹 합계가 필요할 때 이 노드를 씁니다.
{
"name": "Group By Category",
"type": "n8n-nodes-base.summarize",
"typeVersion": 1.1,
"parameters": {
"fieldsToSplitBy": "category",
"fieldsToSummarize": {
"values": [
{ "aggregation": "sum", "field": "amount" },
{ "aggregation": "count", "field": "category" }
]
}
}
}
준비물 — 계정·권한·버전
계정·권한 칸은 아홉 개 다 "없음"이지만, 아래 표를 남겨두는 건 등급과 검증에 쓴 n8n 버전을 항목마다 따로 밝혀두기 위해서입니다. 이 편은 아홉 개 전부 V2(실행까지 확인)입니다 — 외부 URL이 있어야 실행되는 웹훅 같은 항목이 없어서, 계정 0인 채로 전부 실행까지 확인할 수 있었습니다.
| 항목 | 등급 | 준비물 | n8n 버전 |
|---|---|---|---|
| 01 JSON을 CSV 파일로 | V2 | 없음 | 2.38.5 |
| 02 CSV 파일을 JSON 행으로 | V2 | 없음 | 2.38.5 |
| 03 중첩 JSON 평탄화 | V2 | 없음 | 2.38.5 |
| 04 배열 필드를 행으로 쪼개기 | V2 | 없음 | 2.38.5 |
| 05 여러 아이템을 배열 하나로 | V2 | 없음 | 2.38.5 |
| 06 필드 이름 한 번에 바꾸기 | V2 | 없음 | 2.38.5 |
| 07 문자열·날짜 정리 | V2 | 없음 | 2.38.5 |
| 08 시각만 빼고 중복 제거 | V2 | 없음 | 2.38.5 |
| 09 카테고리별 묶어서 합계 | V2 | 없음 | 2.38.5 |
워크플로를 n8n에 올리는 길은 여러 갈래입니다. 캔버스에 Ctrl/Cmd+V로 JSON을 그대로 붙여넣어도 되고, 메뉴의 Import from File로 zip 속 파일을 골라도 되고, CLI 환경이면 n8n import:workflow --input=파일.json 한 줄로도 됩니다. 올라간 뒤 왼쪽 위 Test workflow 버튼(또는 Manual Trigger의 재생 아이콘)을 누르면 그 자리에서 돌아갑니다.
어디서 깨지는가 — 함정 하나
가장 헷갈리는 지점은 Convert to File 노드가 결과를 어디에 담는지입니다 — 01 항목처럼 CSV로 바꾸는 노드는 json을 비우고 전부 binary에만 담기 때문에, 이 노드를 워크플로 맨 끝에 두면 다음 단계가 읽을 데이터가 하나도 안 잡힌 것처럼 보입니다. zip 비밀번호는 497s6r8z으로, 풀면 workflows/ 폴더에 아홉 개 파일이 각각 들어 있습니다. Summarize 노드도 비슷한 함정이 있는데, amount를 합친 결과가 amount가 아니라 sum_amount라는 이름으로 나온다는 걸 실측하지 않으면 다음 노드가 그 필드를 못 찾아 또 깨집니다.
FAQ
n8n이 뭔가요? 엑셀 매크로와 뭐가 다른가요?
n8n은 여러 앱과 API를 코드 없이 연결해 자동으로 돌아가게 만드는 도구입니다. 엑셀 매크로가 엑셀 파일 하나 안에서만 동작한다면, n8n은 엑셀·구글시트·이메일·다른 시스템의 API까지 하나의 흐름으로 이어서 돌립니다.
이 예제들도 계정이 있어야 하나요?
아니요. 아홉 개 전부 로그인이나 API 키 없이 Manual Trigger를 눌러 그 자리에서 실행됩니다. 공개 파일을 받는 02 항목도 실제 응답 200까지 확인했습니다.
내 데이터 구조가 예제와 다르면 어떻게 하나요?
필드 이름만 실제 데이터에 맞게 바꾸면 됩니다. 예를 들어 06 항목의 Rename Keys는 currentKey·newKey 쌍만 바꿔 넣으면 어떤 필드명 조합에도 그대로 쓸 수 있습니다.
n8n을 처음 만져본다면 자동화 기둥 글 모음과 n8n 워크플로우 예제 9종에서 이어지는 예제를 볼 수 있고, 이 사이트가 어떤 기준으로 검증하는지는 소개 페이지에 적어 두었습니다.