Lỗi ADO định dạng ký tự và số

tuhocvba

Administrator
Thành viên BQT
Bạn cần đăng nhập để thấy hình ảnh

arr(36,6) = NULL.
Trong khi giá trị mong muốn là:
arr(36,6) = A
Bạn cần đăng nhập để thấy hình ảnh

File demo:
(Mật khẩu không công khai)
 

tuhocvba

Administrator
Thành viên BQT
Mình nghĩ ADO đã tự ý phán đoán trường dữ liệu là số, do đó khi gặp chữ thì nó không đọc được và để là NULL.
Do đó mình cố tình tạo dòng đầu tiên là dòng ví dụ như sau:
Bạn cần đăng nhập để thấy hình ảnh

Nhưng chạy thử code cũng không thành công.
 

tuhocvba

Administrator
Thành viên BQT
Giải pháp :
Bạn cần định dạng cột B-F là Text. Chú ý không định dạng cả cột, chỉ định dạng tới dòng cuối cùng.
Bạn cần đăng nhập để thấy hình ảnh
 

lienhoasanh9

Yêu THVBA
cái này vba sẽ đoán kiểu dữ liệu dòng đầu tiên, nếu cột có kiểu chữ và số thì sẽ cho ra 2 trường hợp.
trường hợp 1: dòng dầu là kiểu số , thì dữ liệu không lấy được kiểu chữ
trường hợp 2: nếu dòng dầu là kiểu text thì lấy đc cả số và chữ.
cái này làm mình rất bận tâm , nhiều khi quên set kiểu text cho nó . thì không lấy được hoặc sai, vì dữ liệu hệ thống mình người dùng sử dụng cột kiểu text và số.
 

tuhocvba

Administrator
Thành viên BQT
Chúng ta hãy xem xét ví dụ sau:
Dữ liệu cần đọc là file excel TestTable.xlsx có nội dung như sau:
Bạn cần đăng nhập để thấy đính kèm

Kết quả đọc file bằng ADO rồi ghi ra mảng sẽ bị lỗi như sau:
Bạn cần đăng nhập để thấy đính kèm

Hãy để ý arr(0,0) kỳ vọng là STT nhưng lại nhận là Null.
Với cách giải quyết ở trên, tức là định dạng vùng dữ liệu bằng text bằng tay, thì đọc OK.
Thực tế, nếu chỉ có một file cố định như dữ liệu nguồn, thì còn có thể định dạng bằng tay trước khi chạy. Nhưng nếu công việc là đọc vài trăm file không lẽ lại đi mở từng file ra định dạng.
Cho nên mình khắc phục như sau và OK.
Mã:
.Properties("Extended Properties") = "Excel 12.0 XML;HDR=No;IMEX=1;"
Vấn đề ở đây là để IMEX = 1 để chương trình đối xử với cả file excel cần đọc như là với text, không tự ý phán đoán linh tinh nữa.
Nguồn tham khảo :
 
Top