GODRICH
#css-animation#button#loader#transition#scroll#ui#xu-huong-thiet-ke

Tự động hóa Excel bằng n8n, 9 ví dụ không cần code

Bạn tìm tự động hóa Excel vì chán chuyển tay từng dòng dữ liệu giữa bảng tính và hệ thống khác. n8n là công cụ no-code tự động nối app.

Tự chạy · bấm ô để tới mục đó · cả 9 trong một zip

9 cái được xếp theo đúng thứ tự mà dữ liệu thường vướng phải. Đầu tiên là 2 cái đổi định dạng file (01 JSON sang CSV, 02 CSV sang JSON), rồi đến 3 cái sắp lại cấu trúc (03 làm phẳng, 04 tách, 05 gộp), tiếp theo là 2 cái dọn tên và giá trị (06 tên field, 07 chuỗi và ngày tháng), cuối cùng là 2 cái lọc và tổng hợp (08 lọc trùng, 09 gộp nhóm). Xử lý bảng tính ngoài đời cũng hay rối theo đúng thứ tự này — sai dạng, rồi sai cấu trúc, rồi dữ liệu bẩn, cuối cùng bạn chỉ cần một con số tổng.

01Dòng JSON thành file CSV

Bạn thấy gì

Node Code tạo 6 dòng sản phẩm, rồi Convert to File gói chúng thành file CSV nhị phân thật. Node này chỉ để kết quả vào binary chứ không vào json, nên một node Code thứ hai đọc lại tên file và dung lượng để xác nhận việc chuyển đổi thật sự xảy ra.

Dòng JSON thành file CSV
Mở trong tab mới

01 · Dòng JSON thành file CSV — Diện tích đo được 4.869% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

Code → Convert to FileCSV 바이너리V2 실행 확인

Dùng ở đâu

Dùng khi cần báo cáo để tải về hoặc làm file đính kèm email.

{
  "name": "Build CSV File",
  "type": "n8n-nodes-base.convertToFile",
  "typeVersion": 1.1,
  "parameters": {
    "operation": "csv",
    "binaryPropertyName": "data",
    "options": {
      "fileName": "products.csv",
      "headerRow": true
    }
  }
}

02File CSV thành dòng JSON

Chuyện gì diễn ra trên màn hình

HTTP Request tải một file CSV công khai về dưới dạng nhị phân, rồi Extract from File tách từng dòng thành một item JSON riêng. Limit chỉ giữ lại 5 dòng đầu.

File CSV thành dòng JSON
Mở trong tab mới

02 · File CSV thành dòng JSON — Diện tích đo được 4.819% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

HTTP Request(file)Extract from File csvV2 실행 확인

Chỗ dùng

Dùng khi cần biến CSV nhận từ bên ngoài thành dữ liệu workflow, hoặc để import spreadsheet ai đó gửi qua email.

{
  "name": "Parse CSV Rows",
  "type": "n8n-nodes-base.extractFromFile",
  "typeVersion": 1.1,
  "parameters": {
    "operation": "csv",
    "binaryPropertyName": "data",
    "options": {
      "headerRow": true
    }
  }
}

03Làm phẳng JSON lồng nhau

Chuyển động thế nào

Node Code tạo một bản ghi khách hàng có địa chỉ và tọa độ lồng nhau hai tầng, rồi node Code thứ hai dùng hàm đệ quy bung bản ghi đó thành object phẳng với key kiểu dot-notation như address.city.

Làm phẳng JSON lồng nhau
Mở trong tab mới

03 · Làm phẳng JSON lồng nhau — Diện tích đo được 2.951% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

Code 재귀 평탄화Object.entriesV2 실행 확인

Dùng khi nào

Dùng để dọn response API lồng nhau trước khi đưa vào spreadsheet, hoặc làm phẳng dữ liệu form từ webhook.

{
  "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) }];"
  }
}

04Tách field mảng thành nhiều dòng

Bạn thấy gì

Node Code tạo một đơn hàng có mảng dòng hàng bên trong, rồi Split Out bung mảng đó ra để mỗi dòng hàng trở thành một item riêng.

Tách field mảng thành nhiều dòng
Mở trong tab mới

04 · Tách field mảng thành nhiều dòng — Diện tích đo được 2.992% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

Split OutfieldToSplitOutV2 실행 확인

Dùng ở đâu

Dùng khi cần xử lý riêng từng dòng hàng của một đơn, hoặc tách dòng hóa đơn trước khi tính tổng.

{
  "name": "Split Line Items",
  "type": "n8n-nodes-base.splitOut",
  "typeVersion": 1,
  "parameters": {
    "fieldToSplitOut": "lineItems",
    "include": "noOtherFields",
    "options": {}
  }
}

05Gộp nhiều item thành một mảng

Chuyện gì diễn ra trên màn hình

Node Code tạo ra 8 dòng log, mỗi dòng là một item riêng, rồi tùy chọn Aggregate All Item Data của Aggregate gộp tất cả vào một mảng duy nhất dưới field logs.

Gộp nhiều item thành một mảng
Mở trong tab mới

05 · Gộp nhiều item thành một mảng — Diện tích đo được 2.985% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

Aggregate aggregateAllItemDatadestinationFieldNameV2 실행 확인

Chỗ dùng

Dùng khi cần gộp log thành một file để gửi đi, hoặc tạo mảng gốc cho báo cáo tổng hợp.

{
  "name": "Combine Into List",
  "type": "n8n-nodes-base.aggregate",
  "typeVersion": 1,
  "parameters": {
    "aggregate": "aggregateAllItemData",
    "destinationFieldName": "logs",
    "options": {}
  }
}

06Đổi tên nhiều field cùng lúc

Chuyển động thế nào

Node Code tạo một dòng dùng tên field kiểu cũ như usr_nm, usr_em, ord_amt, rồi Rename Keys đổi cả ba sang name, email, amount trong một lần.

Đổi tên nhiều field cùng lúc
Mở trong tab mới

06 · Đổi tên nhiều field cùng lúc — Diện tích đo được 2.948% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

Rename KeyscurrentKey → newKeyV2 실행 확인

Dùng khi nào

Dùng khi cần map tên field của API cũ sang tên mình dùng, hoặc thống nhất tên cột spreadsheet giữa nhiều nguồn.

{
  "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" }
      ]
    }
  }
}

07Dọn chuỗi và ngày tháng

Bạn thấy gì

Node Code tạo các dòng có khoảng trắng thừa, chữ hoa thường lẫn lộn, và ba định dạng ngày khác nhau trộn vào nhau, rồi node Code thứ hai chỉnh tên cho gọn và chuẩn hóa mọi ngày về YYYY-MM-DD.

Dọn chuỗi và ngày tháng
Mở trong tab mới

07 · Dọn chuỗi và ngày tháng — Diện tích đo được 2.953% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

Code trim·대소문자날짜 → YYYY-MM-DDV2 실행 확인

Dùng ở đâu

Dùng để dọn dữ liệu form nhập vào, hoặc thống nhất các định dạng ngày khác nhau trước khi lưu.

{
  "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}));"
  }
}

08Lọc trùng nhưng bỏ qua một field

Chuyện gì diễn ra trên màn hình

Node Code tạo ra các dòng trùng customer và product nhưng khác thời điểm seenAt, rồi Remove Duplicates loại seenAt khỏi phép so sánh để xóa trùng theo mọi field còn lại.

Lọc trùng nhưng bỏ qua một field
Mở trong tab mới

08 · Lọc trùng nhưng bỏ qua một field — Diện tích đo được 2.977% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

Remove Duplicates allFieldsExceptfieldsToExcludeV2 실행 확인

Chỗ dùng

Đây đúng là tình huống khi cùng một sự kiện đến nhiều lần chỉ khác giờ, ví dụ dọn log bị trùng từ webhook gọi lại nhiều lần.

{
  "name": "Dedupe Ignoring seenAt",
  "type": "n8n-nodes-base.removeDuplicates",
  "typeVersion": 2,
  "parameters": {
    "compare": "allFieldsExcept",
    "fieldsToExclude": "seenAt"
  }
}

09Gộp nhóm và tính tổng theo danh mục

Chuyển động thế nào

Node Code tạo 12 đơn hàng, rồi Summarize gộp nhóm theo category, tính tổng amount và đếm số đơn, trả về một item cho mỗi category.

Gộp nhóm và tính tổng theo danh mục
Mở trong tab mới

09 · Gộp nhóm và tính tổng theo danh mục — Diện tích đo được 2.985% · khung hình chuyển động 23/23Nguyên tác GODRICH · SCSS và React nằm trong tệp zip · Xem mật khẩu

Summarizegroup by + sum/countV2 실행 확인

Dùng khi nào

Dùng khi cần tổng hợp doanh thu theo danh mục, hoặc tổng theo nhóm cho dashboard.

{
  "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" }
      ]
    }
  }
}

Cần chuẩn bị gì — tài khoản, quyền, phiên bản

Bảng hạng và phiên bản

Cột cần chuẩn bị của cả 9 mục đều là "không có", nhưng bảng này vẫn cần thiết vì hạng và phiên bản n8n dùng để kiểm chứng khác nhau ở từng mục. Bài này cả 9 mục đều đạt V2 (đã xác minh chạy thật) — không mục nào cần URL webhook đang sống, nên tất cả chạy được mà không cần tài khoản nào.

Mục Hạng Cần chuẩn bị Phiên bản n8n
01 Dòng JSON thành file CSV V2 Không có 2.38.5
02 File CSV thành dòng JSON V2 Không có 2.38.5
03 Làm phẳng JSON lồng nhau V2 Không có 2.38.5
04 Tách field mảng thành nhiều dòng V2 Không có 2.38.5
05 Gộp nhiều item thành một mảng V2 Không có 2.38.5
06 Đổi tên nhiều field cùng lúc V2 Không có 2.38.5
07 Dọn chuỗi và ngày tháng V2 Không có 2.38.5
08 Lọc trùng nhưng bỏ qua một field V2 Không có 2.38.5
09 Gộp nhóm và tính tổng theo danh mục V2 Không có 2.38.5

Ba cách đưa vào n8n

Đưa các workflow này vào n8n có vài cách. Dán JSON thẳng lên canvas bằng Ctrl/Cmd+V, dùng menu Import from File để chọn file trong zip, hoặc chạy n8n import:workflow --input=file.json nếu bạn dùng CLI. Sau khi nạp xong, bấm nút Test workflow ở góc trên bên trái (hoặc icon play trên node Manual Trigger) là chạy ngay tại chỗ.

Chỗ dễ vỡ

Node Convert to File để kết quả ở đâu

Chỗ dễ gây nhầm nhất là việc node Convert to File để kết quả ở đâu — như mục 01, node đổi dữ liệu sang CSV chỉ đặt mọi thứ vào binary chứ không vào json, nên nếu đặt node này ở cuối workflow, bước tiếp theo sẽ chẳng có gì để đọc. Mật khẩu file zip là 497s6r8z, giải nén ra là có ngay 9 file trong thư mục workflows/. Node Summarize cũng có bẫy tương tự: giá trị tổng của field amount không nằm ở key amount mà ở key sum_amount, không kiểm tra thật kỹ điều này thì node tiếp theo sẽ không tìm thấy field và lại gãy tiếp.

FAQ

n8n là gì? Khác gì so với macro trong Excel?

n8n là công cụ no-code nối các app và API lại thành workflow tự chạy. Macro chỉ hoạt động trong một file Excel, còn n8n có thể nối bảng tính, email, và API của hệ thống khác lại thành một luồng duy nhất.

Các ví dụ này có cần tài khoản để thử không?

Không. Cả 9 cái chạy ngay khi bạn nhấn Manual Trigger, không cần đăng nhập hay API key. Mục 02, cái tải file công khai, cũng đã được kiểm tra trả về đúng 200 thật.

Dữ liệu của mình không giống hệt các ví dụ thì đổi gì?

Thường chỉ cần đổi tên field. Ví dụ node Rename Keys ở mục 06 chỉ cần đổi cặp currentKey/newKey là dùng được cho bất kỳ bộ tên field nào của bạn.

Mới làm quen n8n? Danh mục automation và 9 n8n workflow examples có thêm nhiều ví dụ cùng hướng, còn trang giới thiệu ghi rõ trang này xác minh mọi thứ theo tiêu chuẩn nào trước khi đăng.

Nhập mật khẩu file nén

Mật khẩu nằm ngay trong bài viết này. Đọc tới đó bạn sẽ thấy.