[Hỏi] Lấy dữ liệu bằng ADO/DAO khi tên sheet có dấu chấm (.)

Liên hệ QC

huuthang_bd

Chuyên gia GPE
Tham gia
10/9/08
Bài viết
8,709
Được thích
10,814
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Thợ đụng
Giả sử tôi có 1 file gồm 4 sheet có tên lần lượt như sau:
S A.1.1
S A.1#1
S A#1.1
S A#1#1
Xin hỏi các anh chị và các bạn có cách nào dùng ADO/DAO lấy dữ liệu từ 1 sheet bất kỳ trong file đó không.
 

File đính kèm

  • Data.xlsx
    8.9 KB · Đọc: 13
Giả sử tôi có 1 file gồm 4 sheet có tên lần lượt như sau:
S A.1.1
S A.1#1
S A#1.1
S A#1#1
Xin hỏi các anh chị và các bạn có cách nào dùng ADO/DAO lấy dữ liệu từ 1 sheet bất kỳ trong file đó không.

Bạn xem code sau thử nhé:

Mã:
Sub TestExcel()
    Dim cn As Object, rst As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open ("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};dbq=" & ThisWorkbook.FullName & ";")
    Set rst = cn.Execute("select * from [S A.1#1$]")
    Sheet5.[A2].CopyFromRecordset rst


End Sub
 
Lần chỉnh sửa cuối:
Bạn xem code sau thử nhé:

Mã:
Sub TableName()
Dim Cn As Object, rsTables As Object, Arr() As Variant
Set Cn = CreateObject("ADODB.Connection")
Cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0"";")
Set rsTables = Cn.OpenSchema(20)
Arr = rsTables.GetRows(, , "TABLE_NAME")
ActiveCell.Resize(UBound(Arr, 2) - LBound(Arr, 2) + 1, 1).Value = Application.Transpose(Arr)
End Sub

em chạy code ra 4 sheet giống nhau tên là 'S A#1#1$'
 
Bạn xem code sau thử nhé:

Mã:
Sub TableName()
Dim Cn As Object, rsTables As Object, Arr() As Variant
Set Cn = CreateObject("ADODB.Connection")
Cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0"";")
Set rsTables = Cn.OpenSchema(20)
Arr = rsTables.GetRows(, , "TABLE_NAME")
ActiveCell.Resize(UBound(Arr, 2) - LBound(Arr, 2) + 1, 1).Value = Application.Transpose(Arr)
End Sub
Em chạy code thấy lỗi dòng này:
Mã:
Arr = rsTables.GetRows(, , "TABLE_NAME")
Nhưng hình như anh hiểu nhầm ý em. Em muốn lấy dữ liệu của 1 sheet chứ không phải muốn lấy tên sheet (mà tên sheet lấy ra cũng không đúng luôn).
 
Em chạy code thấy lỗi dòng này:
Mã:
Arr = rsTables.GetRows(, , "TABLE_NAME")
Nhưng hình như anh hiểu nhầm ý em. Em muốn lấy dữ liệu của 1 sheet chứ không phải muốn lấy tên sheet (mà tên sheet lấy ra cũng không đúng luôn).
Xin lỗi, đã chỉnh lại code trên ở bài 2
 
Lần chỉnh sửa cuối:
Vấn đề chính là ở chỗ đó đó anh. Trường hợp em nêu ra hoàn toàn có thể xảy ra. Em muốn hỏi trong trường hợp đó có hướng nào để giải quyết không?
Không có cách nào ngoại trừ điều chỉnh tên sheet hoặc đặt Name.
 
Nếu vậy thì kế hoạch của em phá sản rồi. Em đang muốn lấy dữ liệu mà không phải mở file (bằng excel)
lấy dữ liệu mà không cần mở file đối với file xlsx thì còn ít nhất 2 cách nữa mà không dùng ADO mà bạn . Nhưng tôi tò mò muốn nhìn thấy file thật ra sao
 
lấy dữ liệu mà không cần mở file đối với file xlsx thì còn ít nhất 2 cách nữa mà không dùng ADO mà bạn . Nhưng tôi tò mò muốn nhìn thấy file thật ra sao
Thật ra thì không có file thật. Tôi đang muốn lấy tất cả dữ liệu từ một file Excel bất kỳ mà không mở file (bằng Excel). Trường hợp tôi đưa ra là lo xa mà thôi. Không biết bạn có cao kiến gì không?
 
Thật ra thì không có file thật. Tôi đang muốn lấy tất cả dữ liệu từ một file Excel bất kỳ mà không mở file (bằng Excel). Trường hợp tôi đưa ra là lo xa mà thôi. Không biết bạn có cao kiến gì không?
ẹc viết #16 rồi mới nhớ topic này toàn cao thủ . tôi làm gì có cao kiến nào hơn được . mấy điều tôi nói chắc các bạn biết hết rồi
lấy dữ liệu từ 1 vùng xác định . thí dụ A1:D10 thì quá dễ rồi
nếu lấy dữ liệu từ vùng UsedRange của file xlsx ngoài cách ADO còn có thể giải nén file này ra đọc Xml của nó
 
Thật ra thì không có file thật. Tôi đang muốn lấy tất cả dữ liệu từ một file Excel bất kỳ mà không mở file (bằng Excel). Trường hợp tôi đưa ra là lo xa mà thôi. Không biết bạn có cao kiến gì không?
Trong Access anh Bill không cho đặt tên bảng có dấu chấm, truy nhiên trong name thì ok.

1.jpg

Trong MySQL thì cũng không cho

2.jpg

Tuy nhiên trong SQLServer thì đồng ý

3.jpg

Có thể có cách mà ta chưa biết
 
Trong Access anh Bill không cho đặt tên bảng có dấu chấm, truy nhiên trong name thì ok.



Trong MySQL thì cũng không cho



Tuy nhiên trong SQLServer thì đồng ý



Có thể có cách mà ta chưa biết

Nhưng tại sao khi bỏ khoảng trắng thì nó lại lấy dữ liệu được đúng theo tên sheet vậy anh ?
 
Web KT
Back
Top Bottom