Claude Code + Excel
Dọn sổ bán hàng lộn xộn và làm báo cáo bằng Claude Code
Excel cộng ra gần 14 triệu từ file bán hàng tháng 6. Con số thật có thể là bao nhiêu?
Một tháng bán hàng của Don Coffee
Chủ quán có Excel 2019 thường và một file xuất từ máy bán hàng (POS). Anh không biết Python, chỉ cần biết doanh thu thật và muốn nhận lại một báo cáo có thể mở ngay trên chiếc máy đang dùng.
File đầu vào
Ngày viết ba kiểu, tiền có ô là chữ, ngày bị gộp và Tổng tuần chen giữa.
Điều chủ quán cần
Doanh thu theo ngày có biểu đồ, doanh thu theo món và một trang Kiểm tra.
Điều chủ quán giữ
Quyền duyệt từng lệnh, file gốc chỉ đọc và các con số đối chiếu bằng tay.
Hình minh họa
Vì sao cộng thẳng lại sai?
Ba lỗi kéo con số theo hai hướng khác nhau: ô tiền dạng chữ bị phép cộng bỏ qua, ngày 15 xuất đôi làm tổng tăng, còn các dòng Tổng tuần là mốc kiểm tra chứ không phải giao dịch.
Ba lỗi làm phép cộng mù
Vuốt ngang để xem đủ các cột.
| Dấu hiệu | Số lượng | Cách xử lý |
|---|---|---|
| Thành tiền gõ dạng chữ | 63 ô | Bỏ dấu chấm phân cách rồi chuyển thành số |
| Ngày 15 xuất đôi | 15 dòng, 733.000 đ | Bỏ nửa sau sau khi đối chiếu Tổng tuần |
| Tổng tuần gõ tay | 4 dòng | Loại khỏi giao dịch, giữ làm bằng chứng nghiệm thu |
Trong thư mục sales có file ban-hang-thang-6-2026.xlsx xuất từ máy POS của quán. 1. Việc cần làm: đọc file này, dọn sạch dữ liệu và tạo báo cáo bao-cao-thang-6-2026.xlsx gồm: doanh thu theo từng ngày kèm biểu đồ cột, doanh thu theo món xếp từ cao xuống thấp, và một trang Kiểm tra liệt kê những vấn đề tìm thấy trong file gốc. 2. Dữ liệu đầu vào: cột Ngày có 3 kiểu định dạng khác nhau, một số ô tiền gõ dạng chữ như 25.000, có ô ngày bị gộp, có dòng Tổng tuần gõ tay chen giữa dữ liệu, ô SL bỏ trống nghĩa là 1 ly. 3. Nghi ngờ: máy POS có thể xuất trùng nguyên một ngày. Nếu gặp thì bỏ bản sao và ghi rõ vào trang Kiểm tra. 4. Ràng buộc: chỉ đọc file gốc, không được sửa nó. Dùng Python với openpyxl trong .venv có sẵn của thư mục này. 5. Nghiệm thu: in ra tổng doanh thu tháng và số dòng đã bỏ vì trùng, để tôi đối chiếu tay với vài ngày bất kỳ.
Phần 3, Nghi ngờ
Nêu trước khả năng POS xuất trùng nguyên ngày để AI không chỉ chuẩn hóa định dạng rồi dừng.
Phần 5, Nghiệm thu
Yêu cầu tổng tháng, số dòng trùng và vài ngày bất kỳ để người giao việc có thể kiểm tra độc lập.
Một dòng bán Cà phê sữa có ô SL trống, nhưng Thành tiền đúng bằng Đơn giá. Claude Code nên làm gì?
Hai đơn cùng giờ, cùng món và cùng SL trong một ngày có nên tự động xóa một đơn không?
Giải thích
1. Xin phép trước từng lệnh
Bash command ls sales && .venv/bin/python -c "import openpyxl" Kiểm tra file đầu vào và thư viện openpyxl This command requires approval Do you want to proceed? ❯ 1. Yes 2. Yes, and don't ask again 3. No Sau khi được duyệt, Claude Code đọc thử dữ liệu. Helper đầu tiên tên inspect.py trùng tên module chuẩn của Python, nên nó dừng lại, đổi tên thành raw_dump.py rồi mới chạy tiếp: Rename shadowing script and dump raw POS file contents
AI không đụng máy khi chưa được gật đầu. Lần vấp tên file cũng được phát hiện và sửa trước khi helper chạy.
2. Đọc, dọn và ghi ra file mới
Đọc cấu trúc thật
Xem giá trị thô, vùng ô gộp và kiểu dữ liệu trước khi viết quy tắc dọn.
Dọn có nhật ký
Chuẩn hóa ngày, tiền, SL và chỉ bỏ bản sao khi có bằng chứng đối chiếu.
Ghi báo cáo mới
Tạo ba trang báo cáo, không ghi đè lên bảng bán hàng ban đầu.
3. Trang Kiểm tra kể lại toàn bộ việc đã làm
Khối tổng quan của trang Kiểm tra
Vuốt ngang để xem đủ các cột.
| Chỉ số | Giá trị |
|---|---|
| Số dòng dữ liệu đọc được (dòng 3-369) | 367 |
| Dòng "Tổng tuần" gõ tay bị loại | 4 |
| Dòng bị bỏ vì POS xuất trùng nguyên ngày | 15 |
| Dòng giao dịch giữ lại | 348 |
| Tổng doanh thu tháng 6/2026 (VND) | 16.105.000 |
Tám vấn đề được ghi rõ
Vuốt ngang để xem đủ các cột.
| # | Phát hiện | Bằng chứng | Xử lý |
|---|---|---|---|
| 1 | Cột Ngày có 3 kiểu định dạng, đều là chữ | 'dd/mm/yyyy': 115 ô (từ dòng 3); 'd-m-yyyy': 49 ô (từ dòng 119); 'dd.mm.yyyy': 102 ô (từ dòng 259) | Nhận diện cả 3 kiểu, chuẩn hóa về kiểu ngày chuẩn của Excel |
| 2 | Ô tiền gõ dạng chữ (vd '25.000') | Đơn giá: 158 ô; Thành tiền: 63 ô | Bỏ dấu chấm phân cách, chuyển thành số |
| 3 | Ô Ngày bị gộp, các dòng dưới bị trống | 7 vùng gộp: A163:A192, A193:A206, A207:A220, A221:A234, A235:A246, A247:A258, A259:A266 → 97 dòng trống cột Ngày | Điền ngày của ô đầu vùng gộp xuống các dòng bên dưới |
| 4 | Dòng "Tổng tuần" gõ tay chen giữa dữ liệu | 'Tổng tuần 1' (dòng 80) = 3.348.000 VND; 'Tổng tuần 2' (dòng 162) = 3.629.000 VND; 'Tổng tuần 3' (dòng 267) = 4.336.000 VND; 'Tổng tuần 4' (dòng 345) = 3.681.000 VND | Loại khỏi dữ liệu giao dịch; đối chiếu ở bảng bên dưới |
| 5 | Ô SL bỏ trống | 15 dòng: 33, 55, 61, 76, 81, 94, 101, 154, 164, 202, 248, 260, 273, 335, 358 | Hiểu là 1 ly (Thành tiền các dòng này đều bằng 1 x Đơn giá) |
| 6 | POS xuất trùng nguyên một ngày | 15/06/2026: 15 dòng (dòng 178-192) lặp lại y hệt 15 dòng đầu của ngày, trị giá 733.000 VND | Bỏ bản sao (nửa sau), giữ bản ghi đầu tiên |
| 7 | Thành tiền ≠ SL x Đơn giá | Không phát hiện | Chỉ kiểm tra; không dòng nào phải sửa |
| 8 | Đơn hàng trùng giờ + món + SL trong cùng ngày (không phải lỗi) | Dòng 29 & 30 (03/06, 15:30, Cà phê sữa); dòng 136 & 137 (12/06, 20:10, Cà phê sữa) | Giữ nguyên, coi là các đơn riêng lẻ, không phải dữ liệu trùng |
4. Tổng tuần trở thành bằng chứng
Gõ tay so với tính lại
Vuốt ngang để xem đủ các cột.
| Khoảng ngày | Gõ tay | Tính lại | Chênh lệch |
|---|---|---|---|
| Tuần 1 (01-07/6) | 3.348.000 | 3.348.000 | 0 |
| Tuần 2 (08-14/6) | 3.629.000 | 3.629.000 | 0 |
| Tuần 3 (15-21/6) | 4.336.000 | 4.336.000 | 0 |
| Tuần 4 (22-28/6) | 3.681.000 | 3.681.000 | 0 |
5. Tự đọc ngược file vừa tạo
Đọc ngược file báo cáo vừa ghi để nghiệm thu, đối chiếu tổng ngày, tổng tuần và xác nhận file gốc không thay đổi. Số nghiệm thu: - Tổng doanh thu tháng 6/2026: 16.105.000 VND (592 ly, 348 giao dịch) - Số dòng đã bỏ vì trùng: 15 - ngày 15/06/2026 bị POS xuất đôi, dòng 178-192 lặp lại y hệt dòng 163-177 (chỉ khác định dạng ô), trị giá bản sao 733.000 VND - Ngoài ra loại 4 dòng "Tổng tuần" gõ tay (dòng 80, 162, 267, 345) Vài ngày để anh/chị đối chiếu tay: 01/06 = 580.000 (12 dòng đầu, dòng 3-14), 15/06 = 733.000 (sau khi bỏ bản trùng), 22/06 = 835.000, 30/06 = 411.000. Bảng đủ 30 ngày nằm ở output phía trên và trong trang "Doanh thu theo ngày".
Doanh thu theo ngày
Bảng đủ 30 ngày và biểu đồ cột.
Doanh thu theo món
Các món được xếp từ doanh thu cao xuống thấp.
Kiểm tra
Khối tổng quan, tám vấn đề và bảng đối chiếu bốn tuần.
Bốn ngày chủ quán đối chiếu tay
Vuốt ngang để xem đủ các cột.
| Ngày | Doanh thu | Ghi chú |
|---|---|---|
| 01/06 | 580.000 | 12 dòng đầu, dòng 3-14 |
| 15/06 | 733.000 | Sau khi bỏ bản trùng |
| 22/06 | 835.000 | Khớp sổ gốc |
| 30/06 | 411.000 | Khớp sổ gốc |
File gốc không bị sửa. Claude Code đặt script ở vùng làm việc tạm và kiểm tra lại thời gian sửa cùng kích thước file sau khi hoàn tất.
6. Hai bẫy cần nhớ
Thấy giống nhau rồi xóa ngay
Cùng giờ và cùng món chưa đủ chứng minh trùng. Cần nhìn cả khối lặp và một mốc đối chiếu độc lập.
Không nói rõ chỉ đọc
Nếu thiếu ràng buộc này, AI có thể sửa ngay bảng gốc và làm mất dấu dữ liệu ban đầu.
- Giao việc rõ đầu ra, dữ liệu bẩn đã biết, nghi ngờ, ràng buộc và cách nghiệm thu.
- Đọc từng lệnh rồi mới cho Claude Code chạy trên máy.
- Dùng mốc Tổng tuần để chứng minh bản sao thay vì xóa theo cảm giác.
- Yêu cầu AI đọc ngược file vừa tạo và in ra các số có thể đối chiếu tay.
- Giữ file gốc ở chế độ chỉ đọc và xuất kết quả sang file mới.
Thử với file bán hàng thật của bạn
Chép khuôn năm phần: Việc cần làm, Dữ liệu đầu vào, Nghi ngờ, Ràng buộc và Nghiệm thu. Thay tên file, mô tả các lỗi bạn đã thấy và chọn vài ngày bạn có thể tự cộng lại.
Bạn không cần Excel 365 hay Copilot cho vòng lặp này. Báo cáo cuối vẫn mở trong Excel 2019 thường.
Kiểm tra hiểu biết
Vì sao phép SUM trực tiếp trên cột Thành tiền cho kết quả thấp hơn doanh thu thật?