Có nhiều cách tốt để hoàn thành việc này, mà những cách khác đã gợi ý. Sau đây là "lấy dữ liệu Excel thông qua theo dõi SQL", đây là một số gợi ý.
Excel có "Trình hướng dẫn Kết nối Dữ liệu" cho phép bạn nhập hoặc liên kết từ một nguồn dữ liệu khác hoặc thậm chí trong cùng một tệp Excel.
Là một phần của Microsoft Office (và OS) là hai nhà cung cấp được quan tâm: "Microsoft.Jet.OLEDB" cũ và "Microsoft.ACE.OLEDB" mới nhất. Tìm chúng khi thiết lập kết nối (chẳng hạn như với Trình hướng dẫn kết nối dữ liệu).
Sau khi được kết nối với sổ làm việc Excel, một trang tính hoặc phạm vi tương đương với một bảng hoặc dạng xem. Tên bảng của một trang tính là tên của trang tính có thêm dấu đô la ("$") và được bao quanh bởi dấu ngoặc vuông ("[" và "]"); của một phạm vi, nó chỉ đơn giản là tên của phạm vi. Để chỉ định một dải ô chưa được đặt tên làm nguồn bản ghi của bạn, hãy nối ký hiệu hàng / cột chuẩn của Excel vào cuối tên trang tính trong dấu ngoặc vuông.
SQL gốc sẽ (ít nhiều sẽ là) SQL của Microsoft Access. (Trước đây, nó được gọi là JET SQL; tuy nhiên Access SQL đã phát triển và tôi tin rằng JET không còn được dùng trong công nghệ cũ nữa.)
Ví dụ, đọc một trang tính: SELECT * FROM [Sheet1$]
Ví dụ, đọc một phạm vi: SELECT * FROM MyRange
Ví dụ, đọc một dải ô không được đặt tên: SELECT * FROM [Sheet1$A1:B10]
Có rất nhiều sách và trang web có sẵn để giúp bạn làm việc thông qua các chi tiết.
=== Ghi chú thêm ===
Theo mặc định, giả định rằng hàng đầu tiên của nguồn dữ liệu Excel của bạn chứa các tiêu đề cột có thể được sử dụng làm tên trường. Nếu không đúng như vậy, bạn phải tắt cài đặt này, nếu không hàng dữ liệu đầu tiên của bạn "biến mất" để được sử dụng làm tên trường. Điều này được thực hiện bằng cách thêm tùy chọn HDR= setting
vào Thuộc tính mở rộng của chuỗi kết nối. Giá trị mặc định, không cần phải chỉ định, là HDR=Yes
. Nếu bạn không có tiêu đề cột, bạn cần chỉ định HDR=No
; nhà cung cấp đặt tên cho các trường của bạn là F1, F2, v.v.
Thận trọng khi chỉ định trang tính: Nhà cung cấp giả định rằng bảng dữ liệu của bạn bắt đầu bằng ô trống trên cùng, ngoài cùng bên trái, không trống trên trang tính được chỉ định. Nói cách khác, bảng dữ liệu của bạn có thể bắt đầu ở Hàng 3, Cột C mà không có vấn đề gì. Tuy nhiên, ví dụ: bạn không thể nhập tiêu đề tập hợp ở trên và bên trái dữ liệu trong ô A1.
Lưu ý khi chỉ định phạm vi: Khi bạn chỉ định trang tính làm nguồn bản ghi của mình, nhà cung cấp sẽ thêm các bản ghi mới bên dưới các bản ghi hiện có trong trang tính khi không gian cho phép. Khi bạn chỉ định một phạm vi (có tên hoặc chưa đặt tên), Jet cũng thêm các bản ghi mới bên dưới các bản ghi hiện có trong phạm vi khi không gian cho phép. Tuy nhiên, nếu bạn yêu cầu trên phạm vi ban đầu, tập hợp bản ghi kết quả không bao gồm các bản ghi mới được thêm bên ngoài phạm vi.
Các kiểu dữ liệu (giá trị cố gắng) cho C REATE TABLE: Short, Long, Single, Double, Currency, DateTime, Bit, Byte, GUID, BigBinary, LongBinary, VarBinary, LongText, VarChar, Decimal
.
Kết nối với "công nghệ cũ" Excel (các tệp có gia hạn xls): Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties=Excel 8.0;
. Sử dụng kiểu cơ sở dữ liệu nguồn Excel 5.0 cho sổ làm việc Microsoft Excel 5.0 và 7.0 (95) và sử dụng kiểu cơ sở dữ liệu nguồn Excel 8.0 cho sổ làm việc Microsoft Excel 8.0 (97), 9.0 (2000) và 10.0 (2002).
Kết nối với Excel "mới nhất" (tệp có phần mở rộng tệp xlsx): Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;"
Xử lý dữ liệu dưới dạng văn bản: Cài đặt IMEX coi tất cả dữ liệu là văn bản. Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
(Thêm chi tiết tại http://www.connectionstrings.com/excel )
Thông tin thêm tại http://msdn.microsoft.com/en-US/library/ms141683(v=sql.90).aspx và tại http://support.microsoft.com/kb/316934
Kết nối với Excel qua ADODB qua VBA chi tiết tại http://support.microsoft.com/kb/257819
Chi tiết về Microsoft JET 4 tại http://support.microsoft.com/kb/275561