Một file XLSX có cột thành tiền dùng công thức. Người mở bằng Excel nhìn thấy các con số, còn chương trình nhập liệu lại nhận chuỗi bắt đầu bằng dấu bằng hoặc một ô không có giá trị. Nếu đội tích hợp coi đó là lỗi ngẫu nhiên rồi đổi ô thiếu thành số không, dữ liệu website có thể sai mà không xuất hiện thông báo rõ ràng.
Với import Excel có công thức, câu hỏi đầu tiên là hệ thống cần lấy biểu thức hay kết quả đã lưu trong file. Hai đầu ra phục vụ hai nhiệm vụ khác nhau. Bài này hướng dẫn thiết kế bước đọc và đối chiếu cho XLSX bằng openpyxl, kèm cách chuẩn bị một lượt tính lại có kiểm soát. Ví dụ và mã dưới đây chỉ để giải thích, chưa được chạy trên file thật và không phải kết quả kiểm thử của một hệ thống Onter.
Đọc cùng một ô theo hai cách
Giả sử file mẫu tổng hợp có A2 là số lượng, B2 là đơn giá và C2 chứa =A2*B2. Chương trình có thể cần biểu thức C2 để nhận diện đây là ô công thức, hoặc cần kết quả C2 để nhập một giá trị vào hệ thống đích. Không nên chọn cách đọc chỉ vì cách ấy trả về một thứ có thể chuyển thành số.
Tutorial chính thức của openpyxl giải thích data_only điều khiển việc đọc công thức hay giá trị được lưu từ lần Excel đọc bảng tính. Vì thế, đọc giá trị đã lưu không có nghĩa đang chạy lại công thức theo dữ liệu nguồn mới nhất. Tên tham số cũng không bảo đảm dữ liệu đã sẵn sàng để ghi vào website.
# Minh họa đọc hai góc nhìn của cùng một file; chưa thực thi.
from openpyxl import load_workbook
formula_book = load_workbook("sample.xlsx", data_only=False, read_only=True)
value_book = load_workbook("sample.xlsx", data_only=True, read_only=True)
try:
formula_cell = formula_book["Data"]["C2"]
cached_cell = value_book["Data"]["C2"]
# Đối chiếu formula_cell với cached_cell theo hợp đồng nhập liệu.
# Không thay giá trị thiếu bằng 0 một cách tự động.
finally:
formula_book.close()
value_book.close()
Đoạn mã thể hiện hai góc nhìn của cùng tệp và cùng tọa độ ô. Nó chưa giải quyết quyền đọc file, schema, giới hạn dung lượng, kiểm tra công thức lỗi hoặc ghi dữ liệu vào hệ thống đích. Không nên sao chép đoạn minh họa rồi gọi đó là một công cụ import hoàn chỉnh. Khi triển khai, cả hai lượt đọc phải được gắn với đúng phiên bản tệp, không để một người sửa nguồn giữa chừng mà chương trình vẫn ghép kết quả của hai phiên bản.

Ô thiếu kết quả cần được phân loại
Nếu góc nhìn công thức cho thấy C2 có biểu thức còn góc nhìn giá trị không có kết quả, báo cáo nên nêu rõ tọa độ và tình trạng ấy. Không kết luận ngay rằng biểu thức sai, cũng không coi giá trị thiếu là doanh thu bằng không. Có thể đầu vào chưa được chuẩn bị theo hợp đồng; người phụ trách cần quyết định nguồn nào được phép tính lại và cung cấp bản đã kiểm tra.
Mặt khác, một giá trị không trống cũng chưa chứng minh nó còn mới. Giả sử người tạo file đã thay số lượng nhưng quy trình lưu không tạo được kết quả tính tương ứng. Chương trình đọc được một con số vẫn cần căn cứ xác nhận phiên bản. Mục tiêu của bước đọc đôi là phát hiện những câu hỏi cần trả lời, không tạo chứng nhận rằng mọi cache trong file đều đúng.
Tạo một bản dùng để nhập
Trước khi tính lại, giữ bản nguồn trong phạm vi quyền truy cập phù hợp và đặt tên khác cho bản chuẩn bị nhập. Ghi mã phiên bản hoặc hash để không nhầm hai bản có cùng tên. Chốt worksheet, hàng tiêu đề, vùng dữ liệu và các cột mà hệ thống đích yêu cầu là giá trị. Nếu người phụ trách muốn nhập công thức để hệ thống đích tự tính, đó là một hợp đồng khác cần đánh giá riêng, không dùng chung bước ép kiểu số.
Điểm giới hạn quan trọng được tài liệu công thức openpyxl nói rõ: thư viện không đánh giá công thức. Việc mở, gán biểu thức rồi lưu file không thay thế một lượt tính bằng ứng dụng bảng tính. Vì vậy không nên thêm một lần save chỉ để kỳ vọng những ô thiếu kết quả sẽ tự có số.
Nếu tổ chức dùng LibreOffice Calc để chuẩn bị bản nhập, cần đọc đúng chế độ tính của nó. Trợ giúp Recalculate của LibreOffice phân biệt tính lại theo chế độ AutoCalculate và tính lại toàn bộ. Người vận hành phải chọn bước phù hợp, lưu bản kết quả và đọc lại bằng đường nhập thực tế. Bài này không khẳng định mở bất kỳ workbook Excel nào trong Calc sẽ giữ nguyên mọi công thức hoặc tính năng.
Các file có liên kết nguồn ngoài, hàm phụ thuộc môi trường, macro hoặc tính năng đặc thù cần phạm vi thử riêng. Đừng tự bật nội dung chủ động hay kết nối dữ liệu ngoài chỉ để hoàn thành bước import. Nếu chưa đủ điều kiện xác nhận kết quả, nên yêu cầu người có thẩm quyền xuất một bản giá trị từ môi trường được duyệt, thay vì để worker tự quyết định nguồn nào đáng tin.
Đối chiếu trước và sau tính lại
Một nhóm thử giả định có thể giữ A2 bằng 3, B2 bằng 4 và kỳ vọng C2 bằng 12 theo phép nhân đã chốt. Tạo thêm một ô có công thức nhưng chưa có kết quả được xác nhận, một ô giá trị tĩnh và một ô trống có ý nghĩa nghiệp vụ. Mỗi tình huống cần được phân biệt trong báo cáo; không gom cả bốn thành “đọc được” chỉ vì file mở thành công.
Sau lượt tính lại được phép, đối chiếu cột nguồn đã chọn, biểu thức và giá trị đọc qua đường import. Nếu kết quả đổi, người phụ trách cần hiểu vì sao: nguồn đầu vào đổi, phép tính được cập nhật hay cách ứng dụng diễn giải khác nhau. Không chỉ so tổng cuối bảng, bởi hai sai lệch bù nhau có thể che một dòng giá trị cao và một dòng giá trị thấp.
| Góc nhìn công thức | Góc nhìn giá trị | Việc cần làm theo thiết kế đề xuất |
|---|---|---|
| Có biểu thức | Có số | Đối chiếu phiên bản và căn cứ tính, chưa tự xác nhận độ mới |
| Có biểu thức | Thiếu kết quả | Yêu cầu bản được chuẩn bị phù hợp, không tự đổi thành 0 |
| Giá trị tĩnh | Cùng giá trị | Kiểm kiểu và quy tắc cột đích |
| Ô trống | Ô trống | Áp dụng ý nghĩa trống đã thống nhất |
Đưa dữ liệu đã chọn qua ranh giới import
Khi đã có bản dùng để nhập, lưu mối liên hệ giữa file nguồn, bản kết quả và cấu hình mapping. Việc rà soát phải gắn với đúng tập dữ liệu, không chỉ với một cái tên worksheet. Người nhập cần biết cột nào lấy giá trị, cột nào bỏ qua và thông tin nào chỉ dùng để truy vết. Mọi thay đổi ở nguồn hoặc mapping sau bước xác nhận đều cần một lượt kiểm tra tương ứng.
Đừng để báo cáo lỗi sao chép toàn bộ dữ liệu nhạy cảm. Thường chỉ cần mã lượt, worksheet, tọa độ ô, loại vấn đề và thông tin đủ để người có quyền tìm lại nguồn. Với file nhân sự hoặc tài chính, quy trình chia sẻ và quyền truy cập phải được duyệt riêng. Không gửi workbook thật lên một công cụ chuyển đổi chưa được phép dùng để thử xem nó có tính được công thức hay không.
Phần này khác việc kiểm tra một công thức có đáp ứng đúng nghiệp vụ. Nếu nghi vùng tham chiếu hoặc điều kiện cộng bị sai, nên dùng phương pháp kiểm tra công thức Excel và đáp án độc lập của người phụ trách. Có giá trị cache mới không thể làm cho một biểu thức sai nghiệp vụ trở thành đúng.
Đồng thời, chuyển XLSX sang CSV không tự giải quyết độ mới của kết quả. Sau khi có tập giá trị, vẫn còn parser, kiểu mã, ý nghĩa ô trống và tác động ghi dữ liệu đích. Xem thêm kiểm tra CSV trước khi import cho lớp kiểm soát ấy. Không dùng việc file CSV mở được để bỏ qua câu hỏi con số đã được tạo từ phiên bản bảng tính nào.
Khi trao đổi với Onter, có thể chuẩn bị một workbook tổng hợp nhỏ, chỉ rõ ô công thức, kết quả mong đợi và nguồn được phép tính lại. Phạm vi hữu ích là “đọc và đối chiếu đúng kết quả XLSX trước khi nhập”, kèm tình huống thiếu hoặc cũ; chưa cần giao worker quyền sửa toàn bộ workbook hay ghi trực tiếp vào website.

