Bỏ qua để đến Nội dung

Migrate Excel Sang Web App Bằng Claude Code Trong 1 Tuần

Migrate Excel sang web app bằng Claude Code, lộ trình 7 ngày từ spreadsheet đến production

Tháng 11 năm ngoái, một anh chủ xưởng cơ khí ở Bình Dương gửi mình file KH_baogia_FINAL_v7_dungnay.xlsx. Bốn sheet, 38 công thức VLOOKUP chéo nhau, mỗi lần nhân viên sửa giá là cả file đứng 30 giây. Anh ấy hỏi: "Có cách nào không Excel không em?". Một tuần sau, team có web app riêng, chạy trên domain nội bộ, login bằng số điện thoại Zalo. Tổng thời gian code: 6 ngày, dùng Claude Code làm dev partner.

Bài này ghi lại đúng quy trình đó, đã refine qua thêm 3 dự án migrate Excel khác. Không phải tutorial hello world, không phải pitch low-code platform. Chỉ là flow thực chiến cho SME muốn thoát khỏi cảnh "file Excel nặng quá, mở mãi không lên".

Key Takeaways - 88% spreadsheet trong môi trường vận hành có lỗi công thức (Panko, University of Hawaii). Migrate qua web app bỏ được rủi ro sao chép tay và race condition khi nhiều người mở cùng file. - 90% software professional đã dùng AI coding tool năm 2025 (DORA 2025), giúp lộ trình 7 ngày khả thi cho người không phải full-time developer. - Bước quan trọng nhất không phải code, mà là Day 1 audit Excel để tách logic nghiệp vụ khỏi format trình bày.

Nếu bạn chưa quen Claude Code, đọc qua Claude Code là gì? So sánh với Cursor và Copilot trước, bài đó giải thích cách CLI hoạt động và setup ban đầu.


Mục lục

  1. Khi nào nên migrate Excel sang web app?
  2. Lộ trình 7 ngày trông như thế nào?
  3. Day 1-2: Audit Excel và thiết kế schema ra sao?
  4. Day 3-5: Build CRUD, business logic và import data thế nào?
  5. Day 6-7: Test và deploy như thế nào?
  6. Pitfall hay gặp khi migrate Excel?
  7. FAQ

Khi nào nên migrate Excel sang web app?

Bạn nên migrate khi file Excel chạm 1 trong 3 ngưỡng: nhiều hơn 3 người dùng đồng thời, hơn 5.000 dòng dữ liệu nghiệp vụ, hoặc hơn 10 công thức chéo sheet. Theo EuSpRIG, có hơn 80 vụ thiệt hại tài chính công khai do lỗi spreadsheet, riêng TransAlta mất 24 triệu USD chỉ vì một thao tác cut-paste. Khi quy mô vượt ngưỡng, rủi ro vượt giá trị.

Một dấu hiệu thực tế khác: file đã có hậu tố _FINAL_v3_dungnay. Đó là tín hiệu kỹ thuật cho thấy team đang dùng tên file thay version control. Excel không có audit log. Web app có.

Trong 4 dự án mình làm, lý do chính khách quyết migrate không phải vì lỗi (lỗi quen rồi), mà vì 1 trong 2 sự kiện sau:

  • Có người mới vào, train Excel mất 1 tuần và vẫn sai.
  • Sếp cần xem báo cáo trên điện thoại lúc đi công tác, file Excel mở trên Zalo PC version không nổi.

Web app giải quyết cả hai. UI có thể design cho non-tech user, mobile-friendly mặc định, và mọi thay đổi đều có log ai sửa, sửa gì, lúc mấy giờ.

Quy tắc 80/20: Nếu 80% công việc nhập liệu trên Excel chỉ dùng 20% công thức, bạn đã sẵn sàng migrate. 20% công thức phức tạp còn lại sẽ thành business logic trong code, dễ test hơn formula trong cell.

Điểm quan trọng: không phải Excel nào cũng cần migrate. File phân tích ad-hoc, mô hình tài chính một lần, hoặc dashboard cá nhân nên ở Excel. Cái cần migrate là operational spreadsheet, file chạy nghiệp vụ hàng ngày.


Lộ trình 7 ngày trông như thế nào?

Lộ trình chia 4 giai đoạn: audit (Day 1-2), build (Day 3-5), validate (Day 6), deploy (Day 7). Theo GitHub research, developer dùng AI assistant hoàn thành task nhanh hơn 55% (P=.0017). Cộng thêm DORA 2025 ghi nhận 80% professional báo gain năng suất, 1 tuần là khả thi cho web app CRUD vừa.

Sơ đồ kiến trúc migrate Excel sang web app: từ file XLSX qua schema và business logic, ra frontend React và backend với database

Tổng quan stack mình dùng cho dự án 1 tuần:

  • Frontend: Next.js (App Router) + Tailwind, shadcn/ui cho component sẵn.
  • Backend: Next.js API routes hoặc FastAPI nếu logic nặng.
  • Database: PostgreSQL (Supabase free tier cho prototype, hoặc self-host nếu lo data residency).
  • Auth: Magic link email hoặc Zalo OA OAuth nếu user là sales VN.
  • Deploy: Vercel cho frontend, Railway/Fly.io cho backend nếu tách.

Stack này không phải duy nhất. Quan trọng là chọn cái Claude Code đã train kỹ. Mình thử Django, FastAPI, Next.js, NestJS, Laravel. Next.js + PostgreSQL ra code chất lượng nhất, ít hallucination nhất.

Một insight ít người nói: Claude Code làm tốt hơn nhiều khi bạn cho nó schema trước, code sau. Nếu prompt "build app quản lý báo giá" rồi bắt nó tự đoán schema, code sẽ rời rạc. Đưa schema SQL trước, mọi feature sau đều consistent. Đây là điểm khác biệt lớn so với prompt theo kiểu "vibe coding".

Plan 7 ngày này ngắn vì scope rõ. Nếu bạn cần phân hệ kế toán, kho, CRM gộp lại, mở rộng thành 3-4 tuần, dùng quy trình ở build phần mềm custom bằng Claude Code, 7 bước thực chiến.


Day 1-2: Audit Excel và thiết kế schema ra sao?

Day 1-2 làm 2 việc: liệt kê toàn bộ field thực sự dùng, và viết schema SQL phản ánh nghiệp vụ thật. Theo Panko, 88% spreadsheet vận hành có lỗi formula, chủ yếu là omission errors khó phát hiện. Audit chậm ở giai đoạn này tiết kiệm rất nhiều bug ở Day 6.

Lộ trình 7 ngày migrate Excel sang web app, mỗi ngày một mốc cụ thể từ audit đến deploy

Quy trình audit thực tế

Mình mở file Excel cùng client qua Google Meet share screen, không tự đoán. Hỏi đúng 5 câu:

  1. Cell nào nhân viên nhập tay?
  2. Cell nào tự tính ra?
  3. Sheet nào in ra giấy / gửi PDF?
  4. Cell nào nhân viên hay sửa nhầm?
  5. Phần nào "không bao giờ động vào, sợ lệch công thức"?

Câu 5 luôn ra vàng. Đó thường là logic legacy mà chính chủ doanh nghiệp không nhớ ai viết, nhưng vẫn chạy đúng. Mình record lại logic đó dưới dạng pseudocode trước khi chạm code.

Schema mẫu cho dự án báo giá

CREATE TABLE customers (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL,
  phone TEXT,
  zalo_id TEXT UNIQUE,
  created_at TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE products (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  sku TEXT UNIQUE NOT NULL,
  name TEXT NOT NULL,
  base_price NUMERIC(12,2) NOT NULL,
  unit TEXT DEFAULT 'cai'
);

CREATE TABLE quotes (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  customer_id UUID REFERENCES customers(id),
  status TEXT CHECK (status IN ('draft','sent','won','lost')),
  total NUMERIC(14,2),
  created_by UUID,
  created_at TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE quote_items (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  quote_id UUID REFERENCES quotes(id) ON DELETE CASCADE,
  product_id UUID REFERENCES products(id),
  quantity NUMERIC(10,2),
  unit_price NUMERIC(12,2),
  discount_pct NUMERIC(5,2) DEFAULT 0
);

Mình paste cả file Excel (đã anonymize) và schema này vào Claude Code, prompt: "Đây là Excel cũ, đây là schema mới. Map từng cột Excel sang field DB, flag những cột không map được". Claude trả về bảng mapping, kèm note "cột G bị merge cell, không xác định owner". Lập tức biết phần nào cần hỏi lại client.

Citation capsule: Theo DORA 2025, 90% software professional đã dùng AI tool và 59% báo cáo chất lượng code tốt hơn. Khi AI có schema rõ ràng làm anchor, nó tránh được lỗi đặt tên field tùy hứng vốn là nguồn bug lớn ở dự án migrate.

Day 2 kết thúc khi: schema chạy được trên local Postgres, có script seed 10 dòng test, và file mapping Excel-to-DB đã được client confirm qua chat Zalo. Không có chữ "ok" của client, không qua Day 3.


Day 3-5: Build CRUD, business logic và import data thế nào?

Day 3-5 build theo thứ tự CRUD trước, business logic sau, import data cuối. Theo McKinsey, AI-assisted dev viết code mới nhanh hơn 35-45% và viết test phủ tốt hơn 3,7 lần. CRUD tận dụng đúng thế mạnh này.

Day 3: CRUD scaffold

Mình prompt Claude Code: "Tạo trang /customers với list view (table sort theo created_at desc), search theo name+phone, modal create/edit, soft delete. Dùng Next.js App Router, Server Actions, shadcn DataTable. Schema xem ở db/schema.sql."

Trong 3-4 giờ có 4 trang CRUD đủ dùng cho customers, products, quotes, quote_items. Mình review từng PR Claude tạo, sửa naming convention nếu cần, không sửa logic.

Day 4: Business logic

Đây là phần Excel cũ làm bằng formula chéo sheet. Migrate sang code phải explicit. Ví dụ tính tổng báo giá có chiết khấu bậc thang:

// lib/quote-pricing.ts
export function calcQuoteTotal(items: QuoteItem[]): QuoteTotal {
  const subtotal = items.reduce(
    (sum, it) => sum + it.quantity * it.unitPrice * (1 - it.discountPct / 100),
    0
  );
  // Bậc thang: > 50 triệu giảm thêm 3%, > 100 triệu giảm thêm 5%
  const tierDiscount =
    subtotal > 100_000_000 ? 0.05 : subtotal > 50_000_000 ? 0.03 : 0;
  const afterTier = subtotal * (1 - tierDiscount);
  const vat = afterTier * 0.08;
  return { subtotal, tierDiscount, vat, total: afterTier + vat };
}

Mỗi function logic mình bắt Claude viết kèm test (Vitest). Test data lấy thẳng từ Excel cũ: nhập 5 case có sẵn kết quả từ file XLSX, đảm bảo output match đến 2 chữ số thập phân. Đây là cách validate migration không lệch số.

Day 5: Import dữ liệu lịch sử

Phần dễ bị xem nhẹ. Excel cũ có 3 năm lịch sử, không import là khách không chịu chuyển. Mình viết script scripts/import-from-xlsx.ts:

  • Đọc file gốc bằng exceljs.
  • Map row sang object theo bảng mapping Day 1-2.
  • Validate bằng Zod schema trùng với DB schema.
  • Insert batch 500 dòng, log row nào fail kèm lý do.
  • Cuối script in summary: imported / skipped / failed.

Kinh nghiệm: data Excel luôn bẩn hơn bạn tưởng. Số điện thoại 10/11 số trộn, ngày tháng kiểu dd/mm/yyyy lẫn mm/dd/yyyy, tên có khoảng trắng đầu cuối. Đừng cố làm sạch trong code import, write một sheet "data quality issues" để client tự confirm. Tiết kiệm cho bạn 1 ngày tranh cãi.

Tham khảo cách tính TCO khi build phần mềm custom để estimate chi phí dài hạn của web app so với giữ Excel.


Day 6-7: Test và deploy như thế nào?

Day 6 dành cho user acceptance test với người dùng thật, Day 7 deploy. Theo McKinsey, AI-assisted test sinh ra coverage trung bình 84,3% so với 22,8% nếu viết tay. Nhưng coverage không thay được thực tế người dùng bấm nhầm nút.

Day 6: UAT thật, không phải demo

Mình mời 2-3 nhân viên sẽ dùng app hàng ngày vào phòng họp, đưa laptop, không hướng dẫn. Bảo họ làm đúng việc thường ngày: tạo báo giá mới, tìm khách cũ, sửa giá, in PDF. Mình ngồi sau ghi chú.

3 thứ luôn lộ ra:

  1. Naming: Cột "tổng tiền" trong app khác chữ "thành tiền" trong Excel cũ. Người dùng confused. Đổi label.
  2. Workflow ngầm: Excel cũ có chỗ trống ô D5 để ghi chú "khách hứa thanh toán T2 tuần sau". Web app không có field free-text. Add field notes ngay.
  3. Phím tắt: Người gõ Excel quen TabEnter để di chuyển. Form web mặc định nhảy lung tung. Sửa tabIndex.

Sau UAT mình quay lại Claude Code, prompt đúng từng issue, fix trong 2-3 giờ. Đây là vòng feedback nhanh mà Excel không có, vì sửa Excel = ngắt việc cả team.

Day 7: Deploy và handover

Excel vs Web App, 5 chỉ số vận hành Concurrent users 1-3 50+ Audit log No Full Mobile access Khó Native Validate input Yếu Mạnh Tốc độ > 5k dòng Lag Nguồn: tổng hợp từ 4 dự án migrate, 2025-2026
Excel vs Web App qua 5 chỉ số vận hành thường xuyên ảnh hưởng SME. Nguồn: tổng hợp dự án migrate 2025-2026.

Deploy stack 1 tuần của mình:

  • Frontend Vercel (free tier), domain con app.tencongty.com.
  • Database Supabase region Singapore (gần VN, latency < 50ms).
  • File upload Cloudflare R2 hoặc Supabase Storage.
  • Backup nightly bằng cron, dump SQL về email admin.

Handover gồm: 1 tài liệu Markdown 2 trang ghi tài khoản admin và lệnh restore, 1 video Loom 10 phút quay lại flow chính, và Zalo group có mình để hỏi 30 ngày đầu. Sau đó tính phí maintenance theo giờ.

Xem case study chi tiết phần mềm quản lý phòng khám để biết cách scale lộ trình tương tự lên dự án 3 tuần.


Pitfall hay gặp khi migrate Excel?

3 pitfall lớn nhất là: copy y nguyên UX của Excel, không có audit log, và không lên kế hoạch sunset file Excel cũ. Theo Stack Overflow Developer Survey 2024, 76% dev dùng AI tool, nhưng tool không thay được judgment về UX và data governance. Đây là phần phải tỉnh.

Pitfall 1: Copy y UX Excel. Lần đầu mình làm web app cho xưởng cơ khí, design như spreadsheet với 30 cột table to đùng. User chê khó nhìn hơn Excel. Phải redesign theo card view + detail panel. Bài học: web app nên dùng pattern web, đừng giả Excel.

Pitfall 2: Không có audit log. Excel không có log, web app phải có. Bắt buộc bảng audit_log ghi user_id, entity, entity_id, action, before_json, after_json, at. Tốn 1 buổi thêm middleware, tiết kiệm vô số tranh cãi "ai sửa giá khách này?".

Pitfall 3: Không sunset Excel cũ. Nếu để file Excel chạy song song "phòng khi web hỏng", team sẽ dùng cả hai, data lệch trong 1 tháng. Kế hoạch sunset cần cứng: 2 tuần dual-run để đối chiếu, sau đó move file Excel cũ vào folder _archived_2026 và thu permission edit.

Pitfall thứ tư cũng đáng nhắc: ước lượng quá lạc quan vì Claude Code chạy nhanh ở Day 3. Day 6-7 luôn dài hơn dự kiến do UAT lộ workflow ngầm. Buffer 20% thời gian Day 6-7, đừng commit deadline cứng với client trước khi xong UAT.


FAQ

Migrate Excel sang web app mất bao nhiêu tiền?

Tự build với Claude Code, chi phí biến đổi chính là Claude subscription (20 USD/tháng Pro hoặc 100 USD/tháng Max) cộng hosting (Vercel free + Supabase free đủ cho dưới 500 user). Tổng dưới 5 triệu VND tháng đầu. Outsource cho agency dao động 30-150 triệu cho dự án 1 tuần tương đương, tùy stack và SLA hỗ trợ.

Có cần biết code mới migrate được không?

Cần biết đọc code và biết Git basic. Bạn không cần viết được mọi function, nhưng phải review được Claude Code tạo cái gì, có tương ứng spec không. Theo DORA 2025, 90% pro dev dùng AI nhưng vẫn review từng commit. Người không code nên pair với 1 tech lead 2-3 buổi/tuần để duyệt PR.

Web app có an toàn hơn Excel khi nhiều người sửa cùng lúc không?

An toàn hơn rõ rệt. Excel khi share qua OneDrive/Google Sheets có lock file hoặc realtime nhưng không có row-level permission. Web app dùng PostgreSQL có transaction ACID, mỗi user chỉ thấy/sửa row mình có quyền, và mọi thay đổi đều có audit log. EuSpRIG ghi nhận hơn 80 vụ thiệt hại tài chính do lỗi spreadsheet (EuSpRIG horror stories).

Có nên dùng low-code thay vì code thật?

Tùy scope. Low-code (Airtable, Retool, Glide) hợp với app nhỏ dưới 5 entity, ít business logic riêng. Khi có logic phức tạp như chiết khấu bậc thang, tích hợp Zalo OA, hay export PDF custom, code thật bằng Claude Code linh hoạt hơn và rẻ về dài hạn. Gartner forecast thị trường low-code đạt 44,5 tỷ USD năm 2026 (Gartner), nhưng custom code vẫn chiếm phần khó.

Sau 1 tuần xong rồi, app có scale được không?

Có, nếu schema thiết kế đúng từ đầu. Stack Next.js + PostgreSQL scale tốt đến vài chục nghìn user mà không phải refactor cấu trúc. Cái cần thêm về sau là caching (Redis), background job (BullMQ), và tách backend nếu logic nặng. Lộ trình scale này không thuộc 1 tuần đầu, nhưng schema và folder structure ở Day 1-2 quyết định việc scale dễ hay khó.


Kết luận

Migrate Excel sang web app trong 1 tuần khả thi, nhưng không phải vì AI làm hết. Khả thi vì AI làm phần code cơ học nhanh hơn 55% (GitHub research), giải phóng thời gian cho phần khó nhất là audit nghiệp vụ, schema design và UAT. Đó là 3 việc Claude Code không thay được con người.

Tóm tắt:

  • Audit Excel kỹ Day 1-2, hỏi đúng 5 câu, schema trước code sau.
  • Day 3-5 build theo thứ tự CRUD, business logic, import data, mỗi function có test lấy số từ Excel cũ.
  • Day 6 UAT với người thật, Day 7 deploy + handover gọn.
  • Sunset file Excel cũ trong vòng 2 tuần để tránh data lệch.

Nếu bạn đang có file Excel _FINAL_v7.xlsx chạy nghiệp vụ chính, đặt lịch 1 tuần thử migrate. Đọc thêm pillar phần mềm custom để chọn stack phù hợp ngành. Hoặc tham khảo hệ sinh thái Odoo nếu doanh nghiệp đã có ERP và chỉ cần thêm module thay Excel.


Bài viết bởi Loc Nguyen Data Team. Cập nhật 01/05/2026. Mọi case study đều ẩn tên thật khách hàng, dữ liệu minh họa đã anonymize.

trong Claude AI
Quản Lý Lead Trên ZaloCRM Hoạt Động Như Thế Nào? Workflow Thực Tế Cho Đội Sale Việt