Làm th? nào đ? s? d?ng ADO v?i d? li?u Excel t? Visual Basic ho?c VBA

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 257819 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t này th?o lu?n v? vi?c s? d?ng ActiveX Data Objects (ADO) v?i Microsoft Excel b?ng tính như là m?t ngu?n d? li?u. Bài vi?t c?ng n?i b?t cú pháp các v?n đ? và h?n ch? c? th? cho Excel. Bài vi?t này không không th?o lu?n v? OLAP ho?c PivotTable công ngh? ho?c chuyên d?ng khác s? d?ng Excel d? li?u.

Cho thêm thông tin, b?m vào s? bài vi?t dư?i đây đ? xem các bài vi?t trong các Cơ s? ki?n th?c Microsoft:
303814 Làm th? nào đ? s? d?ng ADOX v?i d? li?u Excel t? Visual Basic ho?c VBA

THÔNG TIN THÊM

GI?I THI?U

Các hàng và c?t c?a m?t Microsoft Excel b?ng tính ch?t ch? gi?ng v?i các hàng và c?t trong m?t b?ng cơ s? d? li?u. Mi?n là ngư?i s? d?ng gi? nh? r?ng Microsoft Excel không ph?i là m?t h? th?ng qu?n l? cơ s? d? li?u quan h?, và nh?n ra nh?ng h?n ch? mà th?c t? này áp đ?t, nó thư?ng làm cho tinh th?n đ? có l?i th? c?a Excel và các công c? đ? lưu tr? và phân tích d? li?u.

Microsoft ActiveX Data Objects làm cho nó có th? đ? đi?u tr? m?t b?ng tính Excel như th? nó là cơ s? d? li?u. Bài vi?t này th?o lu?n v? làm th? nào đ? th?c hi?n vi?c này ? đây ph?n: LƯU ?: Các th? nghi?m cho bài vi?t này đư?c ti?n hành v?i d? li?u Microsoft Truy c?p vào các thành ph?n (MDAC) 2.5 trên Microsoft Windows 2000 v?i Visual Basic 6.0 Service Pack 3 và Excel 2000. Bài vi?t này có th? không th?a nh?n ho?c th?o lu?n v? s? khác bi?t trong hành vi mà ngư?i dùng có th? quan sát v?i phiên b?n khác nhau c?a MDAC, Microsoft Windows, Visual Basic, ho?c Excel.

K?t n?i đ? Excel v?i ADO

ADO có th? k?t n?i vào m?t t?p tin d? li?u Excel v?i ho?c là m?t trong hai OLE DB các nhà cung c?p bao g?m trong MDAC:
  • Nhà cung c?p máy bay ph?n l?c Microsoft OLE DB - hay -

  • Microsoft OLE DB nhà cung c?p cho tr?nh đi?u khi?n ODBC

Làm th? nào đ? s? d?ng nhà cung c?p máy bay ph?n l?c Microsoft OLE DB

Các nhà cung c?p máy bay ph?n l?c đ?i h?i ph?i ch? có hai m?u thông tin theo th? t? đ? k?t n?i v?i m?t ngu?n d? li?u Excel: đư?ng d?n, bao g?m tên t?p tin, và các Phiên b?n t?p Excel.

Nhà cung c?p máy bay ph?n l?c b?ng cách s? d?ng m?t k?t n?i chu?i
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=Excel 8.0;"
	.Open
End With
				
Phiên b?n nhà cung c?p: Nó là c?n thi?t đ? s? d?ng nhà cung c?p máy bay ph?n l?c 4,0; các Nhà cung c?p máy bay ph?n l?c 3.51 không h? tr? các tr?nh đi?u khi?n máy bay ph?n l?c ISAM. N?u b?n ch? đ?nh máy bay ph?n l?c 3.51 Provider, t?i th?i gian ch?y b?n nh?n đư?c thông báo l?i sau:
Không th? t?m th?y cài đ?t ISAM.
Phiên b?n Excel: Ch? đ?nh Excel 5.0 cho m?t b?ng tính Excel 95 (Phiên b?n 7,0 c?a Excel), và Excel 8,0 Excel 97, Excel 2000, ho?c Excel 2002 (XP) b?ng tính (Phiên b?n 8.0, 9,0 và 10,0 c?a Excel).

Nhà cung c?p máy bay ph?n l?c b?ng cách s? d?ng h?p tho?i thu?c tính liên k?t d? li?u

N?u b?n s? d?ng ki?m soát d? li?u ADO ho?c môi trư?ng d? li?u trong ?ng d?ng c?a b?n, sau đó các D? li?u thu?c tính n?i k?t h?p tho?i s? đư?c hi?n th? đ? thu th?p k?t n?i c?n thi?t thi?t đ?t.
  1. Trên các Nhà cung c?p tab, ch?n nhà cung c?p máy bay ph?n l?c 4,0; nhà cung c?p máy bay ph?n l?c 3.51 không h? tr? các tr?nh đi?u khi?n máy bay ph?n l?c ISAM. N?u b?n ch? đ?nh nhà cung c?p máy bay ph?n l?c 3.51, t?i th?i gian ch?y b?n nh?n đư?c thông báo l?i sau:
    Không th? t?m th?y cài đ?t ISAM.
  2. Trên các K?t n?i tab, duy?t đ? t?p tin b?ng tính c?a b?n. B? qua "User ID" và "M?t kh?u" m?c, b?i v? chúng không áp d?ng cho k?t n?i Excel. (B?n không th? m? m?t m?t kh?u b?o v? file Excel như m?t ngu?n d? li?u. There is more thông tin v? ch? đ? này sau này trong bài vi?t này.)
  3. Trên các T?t c? tab, ch?n Thu?c tính m? r?ng trong danh sách, và sau đó b?m Ch?nh s?a các giá tr?. Nh?p Excel 8,0; tách nó t? b?t k? m?c khác hi?n có v?i m?t d?u ch?m ph?y (;). N?u b?n b? qua bư?c này, b?n nh?n đư?c m?t thông báo l?i khi b?n ki?m tra c?a b?n k?t n?i, b?i v? các nhà cung c?p máy bay ph?n l?c d? ki?n m?t cơ s? d? li?u Microsoft Access tr? khi b?n ch? ra cách khác.
  4. Tr? v? các K?t n?i tab và Click vào Ki?m th? k?t n?i. Lưu ? r?ng m?t h?p thông đi?p s? xu?t hi?n thông báo cho b?n r?ng quá tr?nh đ? thành công.
Máy bay ph?n l?c nhà cung c?p thi?t đ?t k?t n?i khác

Đ? m?c c?t: Theo m?c đ?nh, nó gi? đ?nh r?ng hàng đ?u c?a ngu?n d? li?u Excel c?a b?n ch?a các đ? m?c c?t có th? đư?c s? d?ng như l?nh v?c tên. N?u đi?u này không ph?i là trư?ng h?p, b?n ph?i b?t này đ?t ra, ho?c đ?u tiên c?a b?n hàng d? li?u "bi?n m?t" đư?c s? d?ng như l?nh v?c tên. Làm như th? b?ng cách thêm các tùy ch?n HDR = thi?t l?p các Thu?c tính m? r?ng k?t n?i chu?i. M?c đ?nh, mà không c?n ph?i đư?c ch? đ?nh, là HDR = Yes. N?u b?n chưa đ? m?c c?t, b?n c?n ph?i ch? đ?nh HDR \u003d không; các nhà cung c?p tên c?a b?n l?nh v?c F1, F2, vv. B?i v? các Thu?c tính m? r?ng chu?i bây gi? ch?a nhi?u giá tr?, nó ph?i đư?c đính kèm trong đôi báo giá riêng c?a m?nh, c?ng thêm m?t c?p đôi báo giá cho bi?t Visual Cơ b?n đ? x? l? t?p đ?u tiên c?a d?u ngo?c kép như các giá tr? văn chương, như trong sau đây Ví d? (nơi thêm d?u cách đ? đư?c thêm vào cho h?nh ?nh r? ràng).
.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=" " Excel 8.0; HDR=No;" " "
				

B?ng cách s? d?ng Microsoft OLE DB nhà cung c?p cho tr?nh đi?u khi?n ODBC

Nhà cung c?p cho tr?nh đi?u khi?n ODBC (đó bài vi?t này đ? c?p đ?n như là các "ODBC Provider" v? l?i ích c?a các ng?n g?n) c?ng đ?i h?i ch? hai (2) mi?ng thông tin đ? k?t n?i v?i m?t ngu?n d? li?u Excel: tên tr?nh đi?u khi?n, và b?ng tính đư?ng d?n và tên t?p.

QUAN TR?NG: M?t k?t n?i ODBC đ? Excel là ch?-đ?c theo m?c đ?nh. ADO c?a b?n RecordSet LockType thi?t l?p tài s?n không ghi đè thi?t đ?t k?t n?i c?p này. B?n ph?i thi?t l?p ReadOnly đ? Sai trong chu?i k?t n?i c?a b?n ho?c c?u h?nh DSN c?a b?n n?u b?n mu?n đ? ch?nh s?a d? li?u c?a b?n. N?u không, b?n nh?n đư?c thông báo l?i sau:
Thao tác ph?i s? d?ng m?t truy v?n updateable.
ODBC nhà cung c?p b?ng cách s? d?ng m?t DSN-ít k?t n?i chu?i
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=C:\MyFolder\MyWorkbook.xls; ReadOnly=False;"
	.Open
End With
				
ODBC nhà cung c?p b?ng cách s? d?ng m?t chu?i k?t n?i v?i m?t DSN
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "DSN=MyExcelDSN;"
	.Open
End With
				
ODBC nhà cung c?p b?ng cách s? d?ng h?p tho?i thu?c tính liên k?t d? li?u

N?u b?n s? d?ng ki?m soát d? li?u ADO ho?c môi trư?ng d? li?u trong ?ng d?ng c?a b?n, sau đó các D? li?u thu?c tính n?i k?t h?p tho?i s? đư?c hi?n th? đ? thu th?p k?t n?i c?n thi?t thi?t đ?t.
  1. Trên các Nhà cung c?p tab, ch?n Microsoft OLE DB nhà cung c?p cho tr?nh đi?u khi?n ODBC.
  2. Trên các K?t n?i tab, ch?n DSN hi?n có mà b?n mu?n s? d?ng, ho?c ch?n S? d?ng k?t n?i chu?i. Đi?u này s? tr? v? tiêu chu?n DSN c?u h?nh h?p tho?i đ? thu th?p thi?t đ?t k?t n?i c?n thi?t. H?y nh? đ? b? ch?n m?c đ?nh ch? đ?c thi?t n?u b?n mu?n, như đ? đ? c?p trư?c đó.
  3. Tr? v? các K?t n?i tab, và nh?p chu?t Ki?m th? k?t n?i. Lưu ? r?ng m?t h?p thông đi?p s? xu?t hi?n thông báo cho b?n r?ng quá tr?nh đ? thành công.
ODBC nhà cung c?p thi?t đ?t k?t n?i khác

Đ? m?c c?t: Theo m?c đ?nh, nó gi? đ?nh r?ng hàng đ?u c?a ngu?n d? li?u Excel c?a b?n ch?a các đ? m?c c?t, có th? đư?c s? d?ng như l?nh v?c tên. N?u đi?u này không ph?i là trư?ng h?p, b?n ph?i b?t này đ?t ra, ho?c đ?u tiên c?a b?n hàng d? li?u "bi?n m?t" đư?c s? d?ng như l?nh v?c tên. Làm như th? b?ng cách thêm các tùy ch?n FirstRowHasNames = thi?t l?p đ? k?t n?i chu?i. M?c đ?nh không c?n ph?i đư?c xác đ?nh, là FirstRowHasNames = 1, nơi 1 = True. N?u b?n chưa đ? m?c c?t, b?n c?n ph?i ch? đ?nh FirstRowHasNames = 0, nơi 0 \U003d false; ngư?i lái xe tên c?a b?n l?nh v?c F1, F2, và vv. Tuøy choïn naøy là không có s?n trong DSN c?u h?nh h?p tho?i.

Tuy nhiên, nh? m?t l?i trong tr?nh đi?u khi?n ODBC, xác đ?nh các FirstRowHasNames thi?t đ?t hi?n th?i không có hi?u l?c. Nói cách khác, ODBC Excel tr?nh đi?u khi?n (MDAC 2,1 và sau này) luôn luôn x? l? hàng đ?u trong các d? li?u đư?c ch? đ?nh ngu?n như trư?ng tên. Cho thêm informationon C?t tiêu đ? l?i, b?m vào s? bài vi?t dư?i đây đ? xem các bài vi?t trong cơ s? ki?n th?c Microsoft:
288343 L?I: Tr?nh đi?u khi?n ODBC Excel Disregards FirstRowHasNames ho?c thi?t l?p tiêu đ?
Hàng đ? quét: Excel không cung c?p cho ADO v?i lư?c đ? chi ti?t thông tin v? d? li?u nó có, như m?t cơ s? d? li?u quan h? th?c. V? v?y, ngư?i lái xe ph?i quét qua ít nh?t m?t vài hàng hi?n t?i d? li?u đ? làm cho m?t đoán h?c t?i ki?u d? li?u c?a m?i c?t. Các m?c đ?nh cho "Hàng đ? quét" là tám (8) hàng. B?n có th? ch? đ?nh m?t giá tr? s? nguyên t? m?t trong nh?ng (1) ñeán mư?i sáu (16) hàng, ho?c b?n có th? ch? đ?nh s? không (0) đ? quét t?t c? hi?n có hàng. Làm như th? b?ng cách thêm các tùy ch?n MaxScanRows = thi?t l?p v?i chu?i k?t n?i, ho?c b?ng cách thay đ?i các Hàng đ? quét thi?t l?p trong DSN c?u h?nh h?p tho?i.

Tuy nhiên, nh? m?t l?i trong tr?nh đi?u khi?n ODBC, ch? đ?nh các hàng đ? quét (MaxScanRows) thi?t đ?t hi?n th?i không có hi?u l?c. Nói cách khác, Excel ODBC driver (MDAC 2,1 và sau này) luôn luôn quét các hàng đ?u tiên 8 trong ngu?n d? li?u đư?c ch? đ?nh trong Th? t? đ? xác đ?nh m?i c?t datatype.

Đ? có thêm thông tin v? các hàng đ? quét l?i, trong đó có m?t workaround đơn gi?n, nh?p vào s? bài vi?t dư?i đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
189897 XL97: Data c?t ng?n đ? 255 k? t? v?i tr?nh đi?u khi?n ODBC Excel
Các thi?t đ?t khác: N?u b?n xây d?ng chu?i k?t n?i c?a b?n b?ng cách s? d?ng các D? li?u thu?c tính n?i k?t h?p tho?i, b?n có th? nh?n th?y m?t s? khác Thu?c tính m? r?ng thi?t đ?t b? sung đ? k?t n?i chu?i mà không ph?i là hoàn toàn c?n thi?t, ch?ng h?n như:
... DefaultDir=C:\WorkbookPath;DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;
				
"Collating chu?i" l?i tin nh?n trong Visual Basic Editor

Trong môi trư?ng thi?t k? Visual Basic v?i nh?t đ?nh Phiên b?n c?a MDAC, b?n có th? xem các l?i sau tin nh?n ngư?i đ?u tiên th?i gian c?a b?n chương tr?nh k?t n?i đ?n m?t ngu?n d? li?u Excel lúc th?i gian thi?t k?:
Ch?n collating tr?nh t? không đư?c h? tr? b?i h? đi?u hành.
Thư này s? xu?t hi?n ch? trong IDE và s? không xu?t hi?n trong các biên d?ch Phiên b?n c?a chương tr?nh. Cho thông tin b? sung, b?m vào s? bài vi?t dư?i đây đ? xem các bài vi?t trong cơ s? ki?n th?c Microsoft:
246167 PRB: Collating chu?i l?i m? ADODB Recordset l?n đ?u tiên ch?ng l?i m?t Excel XLS

Cân nh?c áp d?ng cho c? hai OLE DB các nhà cung c?p

M?t th?n tr?ng v? h?n h?p các lo?i d? li?u

Như đ? nêu trư?c đó, ADO ph?i đoán lúc ki?u d? li?u Đ?i v?i m?i c?t trong b?ng tính Excel hay ph?m vi c?a b?n. (Đi?u này không b? ?nh hư?ng b?i Excel di đ?ng đ?nh d?ng cài đ?t.) M?t v?n đ? nghiêm tr?ng có th? phát sinh n?u b?n có các giá tr? s? h?n h?p v?i các giá tr? văn b?n trong cùng m?t c?t. C? hai máy bay ph?n l?c và các ODBC nhà cung c?p tr? l?i các d? li?u c?a ph?n l?n các lo?i, nhưng tr? v? NULL (tr?ng) giá tr? cho ki?u d? li?u dân t?c thi?u s?. N?u hai lo?i đ?u đư?c tr?n l?n trong các c?t, các nhà cung c?p đ? l?a ch?n s? trên văn b?n.

Ví dụ:
  • Trong c?a b?n tám (8) quét hàng, n?u c?t có ch?a năm (5) tr? v? giá tr? s? và ba (3) các giá tr? văn b?n, các nhà cung c?p (5) s? đi?n tho?i và ba (3) các giá tr? null.
  • Trong c?a b?n tám (8) quét hàng, n?u c?t có ch?a ba (3) các giá tr? s? và (5) các giá tr? văn b?n, các nhà cung c?p tr? v? ba (3) null các giá tr? và năm (5) các giá tr? văn b?n.
  • Trong c?a b?n tám (8) quét hàng, n?u c?t có ch?a b?n (4) các giá tr? soá và b?n (4) các giá tr? văn b?n, các nhà cung c?p tr? v? b?n (4) s? đi?n tho?i và b?n (4) các giá tr? null.
Như là k?t qu?, n?u c?t c?a b?n ch?a h?n h?p các giá tr?, b?n ch? tin tư?ng là lưu tr? s? giá tr? trong c?t như văn b?n, và chuy?n đ?i chúng Quay l?i s? đi?n tho?i khi c?n thi?t trong ?ng d?ng khách hàng b?ng cách s? d?ng Visual Basic VAL ch?c năng ho?c tương đương.

Đ? làm vi?c xung quanh v?n đ? này ch? đ?c d? li?u, cho phép Ch? đ? nh?p kh?u b?ng cách s? d?ng các thi?t l?p "IMEX = 1" trong ph?n thu?c tính m? r?ng k?t n?i chu?i. Đi?u này thi hành các ImportMixedTypes = văn b?n thi?t đ?t đăng k?. Tuy nhiên, lưu ? r?ng b?n C?p Nh?t có th? đưa ra b?t ng? k?t qu? trong ch? đ? này. Đ? có thêm thông tin v? cài đ?t này, b?m s? bài vi?t dư?i đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
194124 PRB: Excel giá tr? tr? l?i gh? th? NULL s? d?ng DAO OpenRecordset
B?n không th? m? m?t m?t kh?u b?o v? b?ng tính

N?u b?ng tính Excel đư?c b?o v? b?ng m?t kh?u, b?n không th? m? nó đ? truy c?p d? li?u, ngay c? b?ng cách cung c?p m?t kh?u chính xác v?i thi?t đ?t k?t n?i c?a b?n, tr? khi b?ng tính t?p đang m? trong các ?ng d?ng Microsoft Excel. N?u b?n th?, b?n nh?n đư?c l?i sau tin nh?n:
Không th? gi?i m? t?p tin.
Đ? bi?t thêm chi ti?t, Nh?p vào s? bài vi?t dư?i đây đ? xem bài vi?t trong các ki?n th?c Microsoft Cơ s?:
211378 XL2000: "Không th? gi?i m? các t?p" l?i v?i m?t kh?u b?o v? File

Truy xu?t và ch?nh s?a d? li?u Excel v?i ADO

Ph?n này th?o lu?n v? hai khía c?nh c?a làm vi?c v?i Excel c?a b?n d? li?u:
  • Làm th? nào đ? ch?n d? li?u - và -

  • Làm th? nào đ? thay đ?i d? li?u

Làm th? nào đ? ch?n d? li?u

Có m?t s? cách đ? ch?n d? li?u. B?n có th?:

  • Ch?n d? li?u Excel v?i m?.
  • Ch?n d? li?u Excel v?i s? ki?m soát d? li?u ADO.
  • Ch?n d? li?u Excel v?i môi trư?ng d? li?u l?nh.

Ch?n d? li?u Excel v?i m?

D? li?u Excel có th? đư?c ch?a trong workbook c?a b?n t?i m?t trong các sau:

  • M?t b?ng tính toàn b?.
  • M?t ph?m vi đư?c đ?t tên c?a các t? bào trên m?t b?ng tính.
  • M?t ph?m vi vô danh c?a các t? bào trên m?t b?ng tính.
Ch? đ?nh m?t b?ng

Đ? ch? đ?nh m?t b?ng như recordsource c?a b?n, s? d?ng các b?ng tên theo sau là m?t d?u hi?u đ?ng đô la và đư?c bao quanh b?i d?u ngo?c vuông. Cho Ví d?:
	strQuery = "SELECT * FROM [Sheet1$]"
				
B?n c?ng có th? delimit tên b?ng v?i báo đơn xéo k? t? (') đư?c t?m th?y trên bàn phím theo d?u ng? (~). Ví dụ:
	strQuery = "SELECT * FROM `Sheet1$`"
				
Microsoft thích d?u ngo?c vuông, là các đ?ng quy ư?c cho tên đ?i tư?ng cơ s? d? li?u có v?n đ?.

N?u b?n b? qua c? hai k? hi?u đô la và các d?u ngo?c, hay ch? là nh?ng d?u hi?u đ?ng đô la, b?n nh?n đư?c các thông báo l?i sau:
... cơ s? d? li?u máy bay ph?n l?c không th? t?m th?y các đ?i tư?ng đư?c ch? đ?nh
N?u b?n s? d?ng k? hi?u đô la nhưng b? qua các d?u ngo?c, b?n s? th?y thông báo l?i sau:
L?i cú pháp trong t? kho?n.
N?u b?n c? g?ng s? d?ng d?u ngo?c kép đơn b?nh thư?ng, b?n nh?n đư?c thông báo l?i sau:
L?i cú pháp trong truy v?n. M?nh đ? truy v?n không đ?y đ?.
Ch? đ?nh m?t lo?t đư?c đ?t tên theo

Đ? ch? đ?nh m?t lo?t các t? bào đư?c đ?t tên như recordsource c?a b?n, ch? c?n s? d?ng tên đư?c xác đ?nh. Ví dụ:
	strQuery = "SELECT * FROM MyRange"
				
Ch? đ?nh m?t ph?m vi vô danh

Đ? ch? đ?nh m?t ph?m vi vô danh c?a các t? bào theo c?a b?n recordsource, g?n ti?p k? hi?u hàng/c?t Excel chu?n vào cu?i t? tên trong d?u ngo?c vuông. Ví dụ:
	strQuery = "SELECT * FROM [Sheet1$A1:B10]"
				
M?t th?n tr?ng v? cách xác đ?nh b?ng: Nhà cung c?p gi? đ?nh r?ng b?ng d? li?u c?a b?n b?t đ?u v?i các t? bào trên h?u h?t, h?u h?t trái, không-tr?ng trên b?ng tính đư?c ch? đ?nh. Trong nói cách khác, c?a b?n b?ng d? li?u có th? b?t đ?u trong d?ng 3, c?t c mà không có m?t v?n đ?. Tuy nhiên, b?n không th?, ví d?, g? m?t tiêu đ? worksheeet ? trên và bên trái các d? li?u trong cell A1.

M?t th?n tr?ng v? cách xác đ?nh ph?m vi: Khi b?n ch? đ?nh m?t b?ng như recordsource c?a b?n, các nhà cung c?p thêm b?n ghi m?i dư?i đây h? sơ hi?n có trong b?ng tính như không gian cho phép. Khi b?n ch? đ?nh m?t ph?m vi (đ?t tên ho?c unnamed), máy bay ph?n l?c c?ng cho bi?t thêm k? l?c m?i dư?i các h? sơ hi?n có trong ph?m vi như là không gian cho phép. Tuy nhiên, n?u b?n requery trên ph?m vi ban đ?u, recordset k?t qu? không bao g?m các v?a đư?c thêm vào h? sơ ngoài ph?m vi.

V?i MDAC Phiên b?n trư?c 2.5, khi b?n ch? đ?nh m?t lo?t đư?c đ?t tên, b?n không th? thêm b?n ghi m?i ngoài nh?ng đ?nh ngh?a gi?i h?n ph?m vi, ho?c b?n nh?n đư?c thông báo l?i sau:
Không th? m? r?ng ph?m vi đư?c đ?t tên theo.

Ch?n d? li?u Excel v?i ki?m soát d? li?u ADO

Sau khi b?n ch? r? các thi?t đ?t k?t n?i d? li?u Excel ngu?n vào các T?ng quát tab c?a ADODC Thu?c tính h?p tho?i h?p, b?m vào các Recordsource tab. N?u b?n ch?n m?t CommandType adCmdText, b?n có th? nh?p m?t CH?N truy v?n trong các Văn b?n ch? huy h?p tho?i v?i cú pháp đư?c mô t? trư?c đó. N?u b?n ch?n m?t CommandType c?a adCmdTable, và b?n đang s? d?ng các nhà cung c?p máy bay ph?n l?c, th? xu?ng danh sách hi?n th? đư?c đ?t tên theo d?y và b?ng tên mà có s?n trong b?ng tính đ? ch?n, v?i các tên đư?c li?t kê đ?u tiên.

H?p tho?i này h?p đúng cách thêm k? hi?u đô la đ? b?ng tên, nhưng không thêm các d?u ngo?c vuông c?n thi?t. Như là k?t qu?, n?u b?n ch? c?n ch?n tên b?ng tính và nh?p vào Ok, b?n nh?n đư?c thông báo l?i sau sau:
L?i cú pháp trong t? kho?n.
B?n ph?i t? thêm d?u ngo?c vuông xung quanh b?ng tên. (Này h?p combo cho phép ch?nh s?a.) N?u b?n đang s? d?ng các nhà cung c?p ODBC, b?n nh?n th?y ch? đ?t tên ph?m vi đư?c li?t kê trong danh sách th? xu?ng này. Tuy nhiên, b?n có th? nh?p th? công m?t b?ng tính v?i tên delimiters thích h?p.

Ch?n d? li?u Excel v?i d? li?u môi trư?ng l?nh

Sau khi thi?t l?p k?t n?i d? li?u môi trư?ng cho Excel c?a b?n d? li?u ngu?n, t?o ra m?t m?i L?nh đ?i tư?ng. N?u b?n ch?n m?t Ngu?n d? li?u c?a SQL Statement, b?n có th? nh?p vào m?t truy v?n trong các h?p b?ng cách s? d?ng cú pháp mô t? trư?c đó. N?u b?n ch?n m?t Ngu?n d? li?u c?a Đ?i tư?ng cơ s? d? li?u, ch?n B?ng trong l?n đ?u tiên danh sách th?-xu?ng, và b?n đang s? d?ng các nhà cung c?p máy bay ph?n l?c, danh sách th? xu?ng hi?n th? c? hai đư?c đ?t tên theo d?y và b?ng tên có s?n trong b?ng tính đ? ch?n, v?i các tên đư?c li?t kê đ?u tiên. (N?u b?n ch?n m?t b?ng tên trong v? trí này, b?n không c?n ph?i thêm d?u ngo?c vuông xung quanh tên b?ng tính th? công như b?n làm cho s? ki?m soát d? li?u ADO.) N?u b?n đang b?ng cách s? d?ng các nhà cung c?p ODBC, b?n th?y ch? đư?c đ?t tên theo d?y đư?c li?t kê trong này th? xu?ng danh sách. Tuy nhiên, b?n có th? nh?p th? công m?t tên b?ng.

Làm th? nào đ? thay đ?i Excel Dados: ch?nh s?a, thêm và xoá

Ch?nh s?a

B?n có th? ch?nh s?a d? li?u Excel v?i phương pháp ADO b?nh thư?ng. RecordSet các l?nh v?c mà tương ?ng v?i các t? bào trong b?ng tính Excel có ch?a Excel công th?c (b?t đ?u b?ng "=") là ch? đ?c và không th? đư?c ch?nh s?a. H?y nh? r?ng m?t ODBC k?t n?i đ? Excel là ch?-đ?c theo m?c đ?nh, tr? khi b?n ch? đ?nh cách khác trong thi?t đ?t k?t n?i c?a b?n. Xem trư?c đó dư?i "s? d?ng các Microsoft OLE DB Provider for tr?nh đi?u khi?n ODBC."

Thêm

B?n có th? thêm b?n ghi c?a b?n recordsource Excel như không gian cho phép. Tuy nhiên, n?u b?n thêm m?i ghi bên ngoài ph?m vi mà b?n ban đ?u đư?c ch? đ?nh, nh?ng h? sơ này là không th? nh?n th?y n?u b?n requery trên ph?m vi ban đ?u đ?c đi?m k? thu?t. Xem trư?c đó dư?i "M?t th?n tr?ng v? cách xác đ?nh ph?m vi."

Trong m?t s? trư?ng h?p, khi b?n s? d?ng các AddNewCập nhật phương pháp c?a ADO RecordSet đ?i tư?ng đ? chèn hàng m?i c?a d? li?u vào m?t b?ng Excel, ADO có th? chèn các giá tr? d? li?u vào các c?t sai trong Excel. Đ? bi?t thêm chi ti?t, b?m vào bài vi?t s? dư?i đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
314763 Kh?c ph?c: ADO chèn d? li?u vào sai c?t trong Excel
Xóa

B?n càng b? gi?i h?n trong xóa d? li?u Excel hơn d? li?u t? m?t ngu?n d? li?u quan h?. Trong cơ s? d? li?u quan h?, "hàng" không có ? ngh?a hay s? t?n t?i ngoài "thu âm"; trong m?t b?ng tính Excel, đây không ph?i là đúng s? th?t. B?n có th? xóa các giá tr? trong các l?nh v?c (t? bào). Tuy nhiên, b?n không th?:
  1. Xóa m?t h? sơ toàn b? cùng m?t lúc ho?c b?n nh?n đư?c các thông báo l?i sau:
    Xoá d? li?u trong m?t b?ng đư?c liên k?t không đư?c h? tr? b?i ISAM này.
    B?n ch? có th? xóa m?t h? sơ c?a t?y tr?ng ra n?i dung c?a m?i trư?ng riêng l?.
  2. Xóa giá tr? trong m?t t? bào có ch?a m?t công th?c Excel ho?c b?n nh?n đư?c thông báo l?i sau:
    Thao tác không ph?i là đư?c cho phép trong b?i c?nh này.
  3. B?n không th? xóa b?ng tính có s?n ph?m nào mà row(s) các đ? xoá d? li?u đ? đư?c đ?t, và recordset c?a b?n s? ti?p t?c hi?n th? r?ng h? sơ tương ?ng v?i các r?ng hàng.
M?t th?n tr?ng v? ch?nh s?a d? li?u Excel v?i ADO: Khi b?n chèn văn b?n d? li?u vào Excel v?i ADO, các giá tr? văn b?n là trư?c v?i báo giá duy nh?t. Đi?u này có th? gây ra v?n đ? sau trong làm vi?c v?i d? li?u m?i.

L?y các c?u trúc ngu?n d? li?u (Metadata) t? Excel

B?n có th? truy xu?t d? li?u v? c?u trúc d? li?u Excel m? ngu?n (b?ng bi?u và các l?nh v?c) v?i ADO. K?t qu? khác nhau hơi gi?a hai OLE DB c?p, m?c dù c? hai tr? l?i ít cùng nh? s? h?u ích l?nh v?c thông tin. Siêu d? li?u này có th? đư?c l?y v?i s? OpenSchema phương pháp c?a ADO K?t n?i đ?i tư?ng này, tr? v? m?t ADO RecordSet đ?i tư?ng. B?n c?ng có th? s? d?ng m?nh hơn c?a Microsoft ActiveX Data Ph?n m? r?ng đ?i tư?ng cho thư vi?n ngôn ng? đ?nh ngh?a d? li?u và an ninh (ADOX) cho m?c đích này. Trong trư?ng h?p c?a m?t ngu?n d? li?u Excel Tuy nhiên, nơi mà m?t b?ng"" là ho?c là m?t b?ng tính ho?c m?t lo?t đư?c đ?t tên, và m?t "l?nh v?c" là m?t trong m?t s? gi?i h?n datatypes chung, năng lư?ng b? sung này là không h?u ích.

Truy v?n b?ng thông tin

Các đ?i tư?ng khác nhau có s?n trong cơ s? d? li?u quan h? (bàn, xem, th? t?c đư?c lưu tr?, và vv), m?t ngu?n d? li?u Excel cho th?y nhi?u ch? b?ng tương đương, bao g?m các b?ng và d?y núi đư?c đ?t tên theo quy đ?nh t?i b?ng tính đ? ch? đ?nh. Đư?c đ?t tên theo d?y đang đư?c coi là "B?ng" và b?ng đang đư?c coi là "H? th?ng b?ng", và không có nhi?u b?ng h?u ích thông tin b?n có th? l?y l?i vư?t quá này b?t đ?ng s?n "table_type". B?n yêu c?u m?t danh sách các b?ng có s?n trong b?ng tính v?i đo?n m? sau:
Set rs = cn.OpenSchema(adSchemaTables)
				
Các nhà cung c?p máy bay ph?n l?c tr? v? m?t recordset v?i chín (9) các l?nh v?c, c?a mà nó populates ch? b?n (4):

  • TABLE_NAME
  • table_type ("B?ng" ho?c "H? th?ng b?ng")
  • date_created
  • date_modified
Ngày hai luôn l?nh v?c cho m?t b?ng cho các hi?n th? cùng m?t giá tr?, mà dư?ng như là "ngày cu?i l?n." Nói cách khác, "date_created" không ph?i là không đáng tin c?y.

Các nhà cung c?p ODBC c?ng tr? v? m?t RecordSet v?i chín (9) các l?nh v?c, trong đó nó populates ch? ba (3):

  • table_catalog, c?p trong đó b?ng tính Sân bay.
  • TABLE_NAME.
  • table_type, như đ? nói trư?c đó.
Theo tài li?u ADO, có th? truy xu?t m?t danh sách các b?ng duy nh?t, ví d?, b?ng cách xác đ?nh sau b? sung tiêu chí đ? các OpenSchema phương pháp:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "System Table"))
				
Th?t không may, đi?u này không làm vi?c ch?ng l?i m?t ngu?n d? li?u Excel v?i MDAC Phiên b?n mu?n hơn 2,0, b?ng cách s? d?ng m?t trong hai nhà cung c?p.

Truy v?n l?nh v?c thông tin

M?i l?nh v?c (c?t) trong m?t ngu?n d? li?u Excel là m?t trong nh?ng datatypes sau đây:

  • s? (ADO datatype 5, adDouble)
  • ti?n t? (ADO datatype 6, adCurrency)
  • h?p l? ho?c boolean (ADO datatype 11, adBoolean)
  • ngày (ADO datatype 7, adDate, b?ng cách s? d?ng máy bay ph?n l?c; 135, adDBTimestamp, b?ng cách s? d?ng ODBC)
  • văn b?n (m?t qu?ng cáo ADO...Char lo?i, ch?ng h?n như 202, adVarChar, 200, adVarWChar ho?c tương t?)
Numeric_precision cho m?t s? c?t luôn luôn quay tr? l?i tên g?i là 15 (đư?c các chính xác t?i đa trong Excel); character_maximum_length văn b?n m?t c?t luôn luôn tr? l?i làm 255 (đó là hi?n th? t?i đa chi?u r?ng, nhưng không t?i đa, đ? dài văn b?n trong m?t c?t Excel). Đó là không nhi?u thông tin h?u ích l?nh v?c mà b?n có th? đư?c ngoài các data_type b?t đ?ng s?n. B?n yêu c?u danh sách c?a các l?nh v?c có s?n trong m?t b?ng v?i đo?n m? sau:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, "TableName", Empty))
				
Các nhà cung c?p máy bay ph?n l?c tr? v? m?t recordset có ch?a các l?nh v?c 28, trong đó nó populates tám (8) cho trư?ng s? và chín (9) cho trư?ng văn b?n. Các h?u ích là kh? năng là đây:

  • TABLE_NAME
  • column_name
  • ordinal_position
  • data_type
Các nhà cung c?p ODBC tr? v? m?t recordset có ch?a các l?nh v?c 29, c?a mà nó populates mư?i (10) cho trư?ng s? và 11 cho trư?ng văn b?n. Các các trư?ng h?u ích là tương t? như trư?c đó.

Li?t kê b?ng bi?u và các l?nh v?c và tài s?n c?a h?

Visual Basic m? (ch?ng h?n như m?u sau) có th? đư?c s? d?ng đ? li?t kê các b?ng và c?t trong m?t ngu?n d? li?u Excel và s? có s?n l?nh v?c thông tin v? m?i. M?u này s? tr? v? k?t qu? c?a nó đ?n m?t Listbox, List1, v? h?nh th?c tương t?.
Dim cn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim intTblCnt As Integer, intTblFlds As Integer
Dim strTbl As String
Dim rsC As ADODB.Recordset
Dim intColCnt As Integer, intColFlds As Integer
Dim strCol As String
Dim t As Integer, c As Integer, f As Integer
Set cn = New ADODB.Connection
With cn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=" & App.Path & _
"\ExcelSrc.xls;Extended Properties=Excel 8.0;"
	'.Provider = "MSDASQL"
	'.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & App.Path & "\ExcelSrc.xls; "
	.CursorLocation = adUseClient
	.Open
End With
Set rsT = cn.OpenSchema(adSchemaTables)
intTblCnt = rsT.RecordCount
intTblFlds = rsT.Fields.Count
List1.AddItem "Tables:	" & intTblCnt
List1.AddItem "--------------------"
For t = 1 To intTblCnt
	strTbl = rsT.Fields("TABLE_NAME").Value
	List1.AddItem vbTab & "Table #" & t & ":	" & strTbl
	List1.AddItem vbTab & "--------------------"
	For f = 0 To intTblFlds - 1
		List1.AddItem vbTab & rsT.Fields(f).Name & _
vbTab & rsT.Fields(f).Value
	Next
	List1.AddItem "--------------------"
	Set rsC = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, strTbl, Empty))
	intColCnt = rsC.RecordCount
	intColFlds = rsC.Fields.Count
	For c = 1 To intColCnt
		strCol = rsC.Fields("COLUMN_NAME").Value
		List1.AddItem vbTab & vbTab & "Column #" & c & ": " & strCol
		List1.AddItem vbTab & vbTab & "--------------------"
		For f = 0 To intColFlds - 1
			List1.AddItem vbTab & vbTab & rsC.Fields(f).Name & _
vbTab & rsC.Fields(f).Value
		Next
		List1.AddItem vbTab & vbTab & "--------------------"
		rsC.MoveNext
		Next
		rsC.Close
		List1.AddItem "--------------------"
		rsT.MoveNext
Next
rsT.Close
cn.Close
				

S? d?ng c?a s? xem d? li?u

N?u b?n t?o m?t liên k?t d? li?u đ?n m?t ngu?n d? li?u Excel trong th? giác Cơ b?n d? li?u xem c?a s?, c?a s? d? li?u xem hi?n th? cùng m?t thông tin mà b?n có th? l?y l?p tr?nh như mô t? trư?c đó. Đ?c bi?t, lưu ? các nhà cung c?p máy bay ph?n l?c li?t kê b?ng và đư?c đ?t tên theo d?y dư?i "B?ng" nơi mà các nhà cung c?p ODBC cho th?y ch? tên là ph?m vi. N?u b?n đang s? d?ng ODBC Nhà cung c?p và có không xác đ?nh b?t k? đư?c đ?t tên theo d?y, danh sách "Các b?ng" s? có s?n ph?m nào.

H?n ch? Excel

Vi?c s? d?ng Excel như m?t ngu?n d? li?u b? ràng bu?c b?i các n?i b? h?n ch? c?a Excel Workbook và b?ng. Chúng bao g?m, nhưng không gi?i h?n đ?i v?i:

  • B?ng kích thư?c: 65,536 hàng b?i 256 c?t
  • T? bào n?i dung (văn b?n): k? t? 32,767
  • T? trong m?t b?ng tính: gi?i h?n b?i có s?n b? nh?
  • Tên trong m?t b?ng tính: gi?i h?n b?i b? nh? s?n dùng

THAM KH?O

Đ? bi?t thêm chi ti?t v? làm th? nào đ? s? d?ng ADO.NET đ? truy xu?t và s?a đ?i h? sơ trong m?t b?ng tính Excel v?i Visual Basic.NET, nh?p s? bài vi?t sau đ? xem bài vi?t trong các ki?n th?c Microsoft Cơ s?:
316934Làm th? nào đ? s? d?ng ADO.NET đ? Retrieve và s?a đ?i h? sơ trong m?t b?ng tính Excel v?i Visual Basic.NET
Đ? bi?t thêm chi ti?t, b?m vào các bài vi?t s? dư?i đây đ? xem các bài vi?t trong cơ s? ki?n th?c Microsoft:
295646 Làm th? nào đ? chuy?n d? li?u t? ADO ngu?n d? li?u đ? Excel v?i ADO
246335 Làm th? nào đ? chuy?n d? li?u t? ADO Recordset đ? Excel v?i t? đ?ng hóa
247412 Thông báo: Phương pháp đ? chuy?n d? li?u vào Excel t? Visual Basic
278973 M?U: ExcelADO ch?ng t? làm th? nào đ? s? d?ng ADO đ? đ?c và ghi d? li?u trong Excel Workbook
318373 Làm th? nào đ? l?y l?i siêu d? li?u t? Excel b?ng cách s? d?ng phương pháp GetOleDbSchemaTable trong Visual Basic.NET

Thu?c tính

ID c?a bài: 257819 - L?n xem xét sau cùng: 17 Tháng Chín 2011 - Xem xét l?i: 3.0
Áp d?ng
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic for Applications 6.0
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
T? khóa: 
kbhowto kbiisam kbmt KB257819 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:257819

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com