วิธีการใช้ ADO กับข้อมูล Excel จาก Visual Basic หรือ VBA

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 257819 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายการใช้วัตถุข้อมูล ActiveX (ADO) กับกระดาษคำนวณ Microsoft Excel เป็นแหล่งข้อมูล บทความนี้ยังเน้นปัญหาไวยากรณ์และข้อจำกัดที่ระบุไปยัง Excel บทความนี้กล่าวถึง OLAP ไม่ หรือเทคโนโลยี PivotTable หรืออื่น ๆ specialized ใช้ของ Excel ข้อมูล

สำหรับข้อมูลเพิ่มเติม โปรดคลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
303814วิธีการใช้ ADOX กับข้อมูล Excel จาก Visual Basic หรือ VBA

ข้อมูลเพิ่มเติม

บทนำ

มีแถวและคอลัมน์ของกระดาษคำนวณ Microsoft Excel กขนาดลักษณะแถวและคอลัมน์ของตารางฐานข้อมูล ตราบที่ผู้ใช้โปรดระลึกว่า Microsoft Excel จะไม่มีระบบการจัดการฐานข้อมูลที่เกี่ยว และจดจำข้อจำกัดที่ imposes นี้ข้อเท็จจริง นั้นมักจะช่วยควรใช้ประโยชน์จาก Excel และเครื่องมือการจัดเก็บ และวิเคราะห์ข้อมูล

วัตถุข้อมูล ActiveX Microsoft สร้างดังกล่าวสามารถถือสมุดงาน Excel กับว่าคุณมีฐานข้อมูล บทความนี้อธิบายวิธีการดำเนินการนี้ในหัวข้อต่อไปนี้:หมายเหตุ:: การทดสอบสำหรับบทความนี้ถูกดำเนินกับ Microsoft Data Access คอมโพเนนต์ (MDAC) 2.5 ใน Microsoft Windows 2000 โดย Visual Basic 6.0 Service Pack 3 และ Excel 2000 บทความนี้อาจไม่ยอมรับ หรือการกล่าวถึงความแตกต่างในลักษณะการทำงานที่ผู้ใช้อาจคำนึงถึงกับ MDAC, Microsoft Windows, Visual Basic หรือ Excel รุ่นต่าง ๆ

การเชื่อมต่อไปยัง Excel กับ ADO

ADO สามารถเชื่อมต่อไปยังแฟ้มข้อมูล Excel กับ OLE สองหนึ่งเป็นผู้ให้บริการฐานข้อมูลที่รวมอยู่ใน MDAC:
  • ผู้ให้บริการฐานข้อมูลของ Microsoft Jet OLE - หรือ -

  • ผู้ให้บริการฐานข้อมูล Microsoft OLE สำหรับโปรแกรมควบคุม ODBC

วิธีการใช้ตัวให้บริการฐานข้อมูล Microsoft Jet OLE

ผู้ให้บริการ Jet เพียงสองชิ้นส่วนข้อมูลที่จำเป็นต้องการเชื่อมต่อกับแหล่งข้อมูล Excel: เส้นทาง ซึ่งรวมถึงชื่อไฟล์ และรุ่นของแฟ้ม Excel

ผู้ให้บริการเจ็ตโดยใช้สายอักขระการเชื่อมต่อ
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
				
รุ่นของผู้ให้บริการ: จำเป็นในการใช้ตัวให้บริการ 4.0 Jet ผู้ให้บริการ 3.51 Jet ไม่สนับสนุนโปรแกรมควบคุมของ Jet ISAM ถ้าคุณระบุ Jet ผู้ให้ 3.51 ในขณะดำเนินการที่คุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
ไม่สามารถค้นหา ISAM สามารถติดตั้งได้
รุ่นของ Excel: ระบุ Excel 5.0 สำหรับสมุดงาน Excel 95 ข้อ (รุ่น 7.0 ของ Excel), และ 8.0 Excel สำหรับสมุดมี Excel 97, Excel 2000 หรือ Excel 2002 (XP) งาน (รุ่น 8.0, 9.0 และ 10.0 ของ Excel)

ผู้ให้บริการเจ็ตโดยใช้กล่องโต้ตอบคุณสมบัติลิงค์ข้อมูล

ถ้าคุณใช้ตัวควบคุมข้อมูล ADO หรือสภาพแวดล้อมของข้อมูลในโปรแกรมประยุกต์ของคุณ จากนั้นคุณสมบัติของลิงค์ข้อมูลกล่องโต้ตอบจะแสดงการรวบรวมการตั้งค่าการเชื่อมต่อที่จำเป็น
  1. ในการผู้ให้บริการแท็บ เลือกผู้ให้บริการ 4.0 Jet ผู้ให้บริการ 3.51 Jet ไม่สนับสนุนโปรแกรมควบคุม ISAM Jet ถ้าคุณระบุผู้ให้บริการ 3.51 Jet ในขณะดำเนินการ คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
    ไม่สามารถค้นหา ISAM สามารถติดตั้งได้
  2. ในการเชื่อมต่อแท็บ เรียกดูแฟ้มสมุดงานของคุณ ละเว้นรายการ "ID ผู้ใช้" และ "รหัสผ่าน" เนื่องจากสิ่งเหล่านี้ไม่ได้ใช้กับการเชื่อมต่อ Excel (คุณไม่สามารถเปิดแฟ้ม Excel ที่มีการป้องกันด้วยรหัสผ่านเป็นแหล่งข้อมูล ไม่มีข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ในบทความนี้)
  3. ในการทั้งหมดแท็บ การเลือกคุณสมบัติเพิ่มเติมในรายการ แล้วคลิกแก้ไขค่า. ป้อนExcel 8.0separating จากอื่นรายการที่มีอยู่ด้วยเครื่องหมายอัฒภาค () ถ้าคุณข้ามขั้นตอนนี้ คุณได้รับข้อความแสดงข้อผิดพลาดเมื่อคุณทดสอบการเชื่อมต่อของคุณ เนื่องจากผู้ให้บริการ Jet เว้นแต่ว่าคุณระบุหรือฐานข้อมูล Microsoft Access expects
  4. เมื่อต้องการส่งคืนสินค้าเชื่อมต่อแท็บและคลิกทดสอบการเชื่อมต่อ. โปรดสังเกตว่า กล่องข้อความปรากฏการแจ้งให้คุณทราบว่า กระบวนการได้เสร็จสมบูรณ์แล้ว
ตั้งค่าการเชื่อมต่อผู้ให้บริการ Jet อื่น ๆ

ส่วนหัวของคอลัมน์: โดยค่าเริ่มต้น มันจะสันนิษฐานว่า แถวแรกของแหล่งข้อมูลของ Excel ของคุณประกอบด้วยส่วนหัวของคอลัมน์ที่สามารถใช้เป็นชื่อเขต หากไม่เกิดขึ้นในกรณี คุณต้องเปิดการตั้งค่านี้ออก หรือถูกลบของแถวแรกของข้อมูล "ออก" ที่จะใช้เป็นชื่อของฟิลด์ ซึ่งจะดำเนินการ โดยการเพิ่มที่เลือกกำหนดได้hdr =การตั้งค่าไปคุณสมบัติเพิ่มเติมของสายอักขระการเชื่อมต่อ ค่าเริ่มต้น ซึ่งไม่สามารถจำเป็นต้องระบุHDR =ใช่. ถ้าคุณไม่มีส่วนหัวของคอลัมน์ คุณจำเป็นต้องระบุHDR =ไม่ใช่ตัวให้บริการชื่อเขตข้อมูลของคุณ F1, F2 และอื่น ๆ เนื่องจากการคุณสมบัติเพิ่มเติมสตริงที่ประกอบด้วยค่าหลายค่าในขณะนี้ นั้นต้องมีอยู่ในใบเสนอราคาที่คู่เอง เครื่องหมายบวกคู่อินเพิ่มเติมของการอ้างอิงคู่เพื่อบอก Visual Basic ถือชุดแรกของการอ้างอิงเป็นค่าสัญพจน์ ในตัวอย่างต่อไปนี้ที่ (ซึ่งรวมช่องว่างเพิ่มเติมได้เพิ่มสำหรับความคมชัดที่มองเห็น)
.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=" " Excel 8.0; HDR=No;" " "
				

การใช้ตัวให้บริการของฐานข้อมูล Microsoft OLE สำหรับโปรแกรมควบคุม ODBC

ผู้ให้บริการสำหรับโปรแกรมควบคุม ODBC (ซึ่งบทความนี้อ้างถึงเป็นผู้ที่ "ODBC ให้" สำหรับ sake ของ brevity) ยังต้องเพียงสอง (2) ชิ้นส่วนของข้อมูลการเชื่อมต่อกับแหล่งข้อมูล Excel: ชื่อไดรเวอร์ และเส้นทางสมุดงาน และชื่อแฟ้ม

สิ่งสำคัญ: การเชื่อมต่อ ODBC ไปที่ Excel เป็นแบบอ่านอย่างเดียว โดยค่าเริ่มต้น ADO ของชุดระเบียนLockTypeการตั้งค่าคุณสมบัติไม่แทนการตั้งค่าระดับการเชื่อมต่อนี้ คุณต้องการตั้งค่าReadOnlyเมื่อต้องการเท็จin your connection string or your DSN configuration if you want to edit your data. Otherwise, you receive the following error message:
Operation must use an updateable query.
ODBC Provider Using a DSN-Less Connection String
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 Provider Using a Connection String with a DSN
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "DSN=MyExcelDSN;"
	.Open
End With
				
ODBC Provider Using the Data Link Properties Dialog Box

If you use the ADO Data Control or the Data Environment in your application, then theคุณสมบัติของลิงค์ข้อมูลdialog box is displayed to gather the necessary connection settings.
  1. ในการผู้ให้บริการแท็บ การเลือกMicrosoft OLE DB Provider for ODBC Drivers.
  2. ในการเชื่อมต่อtab, select the existing DSN that you want to use, or chooseUse connection string. This brings up the standard DSN configuration dialog box to gather the necessary connection settings. Remember to deselect the default read-only setting if desired, as mentioned previously.
  3. Return to theเชื่อมต่อtab, and clickTest Connection. Note that a message box appears informing you that the process has succeeded.
Other ODBC Provider Connection Settings

Column headings: By default, it is assumed that the first row of your Excel data source contains columns headings, which can be used as field names. If this is not the case, you must turn this setting off, or your first row of data "disappears" to be used as field names. This is done by adding the optionalFirstRowHasNames=setting to the connection string. The default, which does not need to be specified, isFirstRowHasNames=1โดย:1 = True. If you do not have column headings, you need to specifyFirstRowHasNames=0โดย:0 = False; the driver names your fields F1, F2, and so forth. This option is not available in the DSN configuration dialog box.

However, due to a bug in the ODBC driver, specifying theFirstRowHasNamessetting currently has no effect. In other words, the Excel ODBC driver (MDAC 2.1 and later) always treats the first row in the specified data source as field names.For additional informationon the Column Heading bug, click the article number below to view the article in the Microsoft Knowledge Base:
288343BUG: Excel ODBC Driver Disregards the FirstRowHasNames or Header Setting
Rows to Scan: Excel does not provide ADO with detailed schema information about the data it contains, as a relational database would. Therefore, the driver must scan through at least a few rows of the existing data in order to make an educated guess at the data type of each column. The default for "Rows to Scan" is eight (8) rows. You can specify an integer value from one (1) to sixteen (16) rows, or you can specify zero (0) to scan all existing rows. This is done by adding the optionalMaxScanRows=setting to the connection string, or by changing theRows to Scansetting in the DSN configuration dialog box.

อย่างไรก็ตาม เนื่องจากจุดบกพร่องในโปรแกรมควบคุม ODBC การระบุแถวที่จะสแกน (MaxScanRows) การตั้งค่าในปัจจุบันยังไม่มีผลต่อ ในอย่างอื่น โปรแกรมควบคุม Excel ODBC (MDAC 2.1 และรุ่นที่ใหม่กว่า) เสมอสแกนแถว 8 ครั้งแรกในแหล่งข้อมูลที่ระบุเพื่อที่จะกำหนดชนิดข้อมูลแต่ละคอลัมน์

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแถวไปยังจุดบกพร่องการสแกน รวมทั้งวิธีแก้ปัญหาแบบง่าย คลิกหมายเลขบทความด้านล่างนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
189897XL97: ข้อมูลที่ถูกตัดทอนถึง 255 อักขระด้วยโปรแกรมควบคุม ODBC Excel
การตั้งค่าอื่น ๆ: ถ้าคุณสร้างสายอักขระการเชื่อมต่อของคุณ โดยใช้การคุณสมบัติของลิงค์ข้อมูลกล่องโต้ตอบ คุณอาจสังเกตเห็นบางอย่างอื่นคุณสมบัติเพิ่มเติมการตั้งค่าเพิ่มลงในสายอักขระการเชื่อมต่อที่ไม่ใช่จริง ๆ จำ เช่น:
... DefaultDir=C:\WorkbookPath;DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;
				
ข้อความแสดง "collating ลำดับ" ข้อผิดพลาดข้อใน Visual Basic Editor

ใน Visual Basic ออกแบบระบบที่มีรุ่นที่แน่นอนของ MDAC คุณอาจเห็นครั้งแรกของข้อความข้อผิดพลาดต่อไปนี้ซึ่งโปรแกรมของคุณเชื่อมต่อกับแหล่งข้อมูล Excel ขณะออกแบบ:
เลือกลำดับ collating ที่ไม่ได้รับการสนับสนุน โดยระบบปฏิบัติการ
ข้อความนี้ปรากฏใน IDE เท่านั้น และจะไม่ปรากฏในโปรแกรมรุ่นที่คอมไพล์แล้วสำหรับข้อมูลเพิ่มเติม โปรดคลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
246167PRB: Collating ข้อผิดพลาดลำดับ ADODB เปิดชุดระเบียนเวลาแรกกับ Excel XLS

ข้อควรพิจารณาที่ใช้กับผู้ให้บริการฐานข้อมูล OLE ทั้งสอง

มีข้อควรระวังเกี่ยวกับชนิดข้อมูลแบบผสม

ตามที่ระบุไว้ก่อนหน้านี้ ADO ต้อง guess ที่ชนิดข้อมูลสำหรับแต่ละคอลัมน์ในแผ่นงาน Excel หรือช่วงของคุณ (ซึ่งจะไม่ได้รับจาก ด้วยการตั้งค่าการจัดรูปแบบเซลล์ของ Excel) ปัญหาที่ร้ายแรงสามารถเกิดขึ้นหากคุณมีค่าตัวเลขที่ผสมกับค่าของข้อความในคอลัมน์เดียวกัน Jet และผู้ให้บริการ ODBC กลับพิมพ์ ข้อมูลของส่วนใหญ่ แต่กลับเป็น NULL (ว่าง) ค่าสำหรับชนิดของข้อมูลส่วนน้อย ถ้าเท่าสองชนิดคือผสมในคอลัมน์ ตัวให้บริการเลือกตัวเลขเหนือข้อความ

ตัวอย่าง::
  • ในของคุณแปด (8) แกนแถว ถ้าคอลัมน์ประกอบด้วยห้า (5) ค่าตัวเลขและสาม (3) ค่าข้อความ จากผู้ให้บริการกลับตัวเลขห้า (5) และสาม (3) เป็น null ค่า
  • ในของคุณแปด (8) แกนแถว หากประกอบด้วยคอลัมน์สาม (3) ค่าตัวเลขและห้า (5) ค่าข้อความ จากผู้ให้บริการกลับสาม (3) เป็น null ค่าและค่าข้อความห้า (5)
  • ในของคุณแปด (8) แกนแถว ถ้าคอลัมน์ประกอบด้วยสี่ (4) ค่าตัวเลขและสี่ (4) ค่าข้อความ จากผู้ให้บริการกลับตัวเลขสี่ (4) และสี่ (4) เป็น null ค่า
ด้วยเหตุ ถ้าคอลัมน์ของคุณประกอบด้วยการผสมค่า recourse ของคุณเท่านั้นคือ เพื่อเก็บค่าตัวเลขในคอลัมน์ที่เป็นข้อความ และ การแปลงแฟ้มเหล่านั้นกลับไปยังหมายเลขเมื่อจำเป็นในแอพลิเคชันไคลเอนต์ โดยใช้ Visual Basicvalฟังก์ชันหรือเทียบเท่ากับ

เมื่อต้องการแก้ไขปัญหานี้สำหรับข้อมูลแบบอ่านอย่างเดียว เปิดใช้งานโหมดการนำเข้าโดยใช้การตั้งค่า " IMEX = 1 " ในส่วนขยายคุณสมบัติของสายอักขระการเชื่อมต่อ นี่ enforcesImportMixedTypes =ข้อความการตั้งค่ารีจิสทรี อย่างไรก็ตาม หมายเหตุว่า โปรแกรมปรับปรุงอาจให้ผลลัพธ์ที่ไม่คาดคิดในโหมดนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่านี้ ให้คลิกหมายเลขบทความด้านล่างนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
194124PRB: ส่งคืนเป็น NULL ใช้ OpenRecordset DAO ค่า Excel
คุณไม่สามารถเปิดสมุดงานที่ป้องกันรหัสผ่าน

ถ้าสมุดงาน Excel ถูกป้องกัน ด้วยรหัสผ่าน คุณไม่สามารถเปิดสำหรับการเข้าถึงข้อมูล แม้แต่ โดย supplying รหัสผ่านที่ถูกต้องด้วยการตั้งค่าการเชื่อมต่อของคุณ ยกเว้นแฟ้มสมุดงานเปิดอยู่ในโปรแกรมประยุกต์ของ Microsoft Excel แล้ว ถ้าคุณพยายาม คุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
ถอดอาจไม่รหัสไฟล์
สำหรับข้อมูลเพิ่มเติม โปรดคลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
211378XL2000: "ถอดรหัสไม่ไม่ลับแฟ้ม" การข้อผิดพลาดกับรหัสผ่านป้องกันแฟ้ม

เรียกดู และแก้ไขข้อมูล Excel กับ ADO

ส่วนนี้อธิบายเกี่ยวกับรูปแบบที่สองของการทำงานกับ Excel ของคุณข้อมูล:
  • วิธีการเลือกข้อมูล - และ -

  • วิธีการเปลี่ยนแปลงข้อมูล

วิธีการเลือกข้อมูล

มีหลายวิธีเพื่อเลือกข้อมูล คุณสามารถ:

  • เลือกข้อมูลที่ มีรหัสของ Excel
  • เลือกข้อมูล Excel ที่ มีการควบคุมข้อมูล ADO
  • เลือกข้อมูล Excel กับสภาพแวดล้อมของข้อมูลคำสั่ง

เลือกข้อมูล Excel กับรหัส

ข้อมูลของ Excel อาจจะอยู่ในสมุดงานของคุณในรายการใดรายการหนึ่งต่อไปนี้:

  • มีทั้งแผ่นงาน
  • ช่วงที่มีชื่อของเซลล์บนแผ่นงาน
  • มีช่วงที่ไม่มีชื่อของเซลล์บนแผ่นงาน
ระบุเป็นแผ่นงาน

เมื่อต้องการระบุแผ่นงานเป็น recordsource ของคุณ ใช้ชื่อแผ่นงานตาม ด้วยเครื่องหมายดอลลาร์ และ surrounded ด้วยวงเล็บเหลี่ยม ตัวอย่าง::
	strQuery = "SELECT * FROM [Sheet1$]"
				
นอกจากนี้คุณสามารถจำกัดชื่อแผ่นงาน ด้วยอัญประกาศเดี่ยว slanted อักขระ (') พบบนแป้นพิมพ์ภายใต้ tilde (~) ตัวอย่าง::
	strQuery = "SELECT * FROM `Sheet1$`"
				
Microsoft ต้องการวงเล็บเหลี่ยม ซึ่งเป็นแบบแผนการคิดตำแหน่งสำหรับชื่อวัตถุฐานข้อมูลของปัญหา

If you omit both the dollar sign and the brackets, or just the dollar sign, you receive the following error message:
... the Jet database engine could not find the specified object
If you use the dollar sign but omit the brackets, you will see the following error message:
ข้อผิดพลาดไวยากรณ์ในจากอนุประโยค
If you try to use ordinary single quotes, you receive the following error message:
Syntax error in query. Incomplete query clause.
Specify a Named Range

To specify a named range of cells as your recordsource, simply use the defined name. ตัวอย่าง::
	strQuery = "SELECT * FROM MyRange"
				
Specify an Unnamed Range

To specify an unnamed range of cells as your recordsource, append standard Excel row/column notation to the end of the sheet name in the square brackets. ตัวอย่าง::
	strQuery = "SELECT * FROM [Sheet1$A1:B10]"
				
A caution about specifying worksheets: The provider assumes that your table of data begins with the upper-most, left-most, non-blank cell on the specified worksheet. In other words, your table of data can begin in Row 3, Column C without a problem. However, you cannot, for example, type a worksheeet title above and to the left of the data in cell A1.

A caution about specifying ranges: When you specify a worksheet as your recordsource, the provider adds new records below existing records in the worksheet as space allows. When you specify a range (named or unnamed), Jet also adds new records below the existing records in the range as space allows. However, if you requery on the original range, the resulting recordset does not include the newly added records outside the range.

With MDAC versions prior to 2.5, when you specify a named range, you cannot add new records beyond the defined limits of the range, or you receive the following error message:
Cannot expand named range.

Select Excel Data with the ADO Data Control

After you specify the connection settings for your Excel data source on theทั่วไปtab of the ADODCคุณสมบัติdialog box, click on theRecordsourceแท็บ If you choose a CommandType of adCmdText, you can enter a SELECT query in theCommand Textdialog box with the syntax described previously. If you choose a CommandType of adCmdTable, and you are using the Jet Provider, the drop-down list displays both the named ranges and worksheet names that are available in the selected workbook, with named ranges listed first.

This dialog box properly appends the dollar sign to worksheet names, but does not add the necessary square brackets. As a result, if you simply select a worksheet name and clickตกลง, you receive the following error message later:
ข้อผิดพลาดไวยากรณ์ในจากอนุประโยค
You must manually add the square brackets around the worksheet name. (This combo box does allow editing.) If you are using the ODBC Provider, you see only named ranges listed in this drop-down list. However, you can manually enter a worksheet name with the appropriate delimiters.

Select Excel Data with Data Environment Commands

After setting up the Data Environment Connection for your Excel data source, create a newคำสั่งวัตถุ If you choose aSource of DataofSQL Statementคุณสามารถป้อนแบบสอบถามในกล่องข้อความโดยใช้ไวยากรณ์อธิบายไว้ก่อนหน้านี้ได้ ถ้าคุณเลือกคำแหล่งที่มาของข้อมูลของวัตถุฐานข้อมูลเลือกตาราง:ในครั้งแรก รายการหล่นลง และคุณใช้ตัวให้บริการ Jet รายการหล่นลงแสดงช่วงที่มีชื่อและชื่อแผ่นงานที่พร้อมใช้งานในสมุดงานที่เลือก กับช่วงที่มีชื่อที่แสดงรายการเป็นอันดับแรก (ถ้าคุณเลือกชื่อแผ่นงานในตำแหน่งที่ตั้งนี้ คุณไม่จำเป็นต้องเพิ่มวงเล็บสี่เหลี่ยมล้อมรอบชื่อแผ่นงานด้วยตนเอง ตามที่คุณดำเนินการสำหรับการควบคุมข้อมูล ADO) ถ้าคุณใช้ตัวให้บริการ ODBC คุณเห็นรายการในรายการหล่นลงนี้เท่านั้นมีชื่อช่วง อย่างไรก็ตาม คุณสามารถป้อนด้วยตนเองชื่อแผ่นงาน

วิธีการเปลี่ยนแปลง Excel ข้อมูล: แก้ไข เพิ่ม และลบ

แก้ไข

คุณสามารถแก้ไขข้อมูลใน Excel ได้ ด้วยวิธี ADO ปกติ เขตข้อมูลชุดระเบียนที่ตรงกับเซลล์ใน Excel แผ่นงานมี Excel สูตร (การเริ่มต้น ด้วย "=") เป็นแบบอ่านอย่างเดียว และไม่สามารถแก้ไข โปรดจำไว้ว่า การเชื่อมต่อ ODBC ไปที่ Excel เป็นแบบอ่านอย่างเดียว โดยค่าเริ่มต้น เว้นแต่ว่าคุณได้ระบุหรือในการตั้งค่าการเชื่อมต่อของคุณ ดูก่อนหน้าภายใต้ "การใช้ผู้ให้บริการระบบจัดการ Microsoft OLE DB สำหรับโปรแกรมควบคุม ODBC

add

คุณสามารถเพิ่มการเรกคอร์ด recordsource Excel ของคุณในขณะที่อนุญาตให้ช่องว่าง อย่างไรก็ตาม ถ้าคุณเพิ่มระเบียนใหม่ภายนอกช่วงที่คุณระบุเริ่มต้น เรกคอร์ดเหล่านี้จะไม่สามารถมองเห็นได้ถ้าคุณ requery ในข้อมูลจำเพาะเกี่ยวกับช่วงต้นฉบับ ดูก่อนหน้าภายใต้คำ "การเตือนเกี่ยวกับการระบุช่วง

ในบางสถานการณ์ เมื่อคุณใช้การAddNewและการปรับปรุงวิธีการ ADOชุดระเบียนวัตถุที่แทรกแถวใหม่ของข้อมูลไป Excel ตาราง ADO อาจแทรกค่าของข้อมูลในคอลัมน์ที่ไม่ถูกต้องใน Excelสำหรับข้อมูลเพิ่มเติม โปรดคลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
314763การแก้ไข: ADO แทรกข้อมูลลงในคอลัมน์ที่ไม่ถูกต้องใน Excel
ลบ

คุณจะจำกัดมากขึ้นในการลบข้อมูลของ Excel ไม่ใช่ข้อมูลจากแหล่งข้อมูลที่เกี่ยว ในฐานข้อมูลที่เกี่ยว "แถว" มีความหมายหรือมีอยู่นอกจาก "บันทึก" ไม่มี ในแผ่นงาน Excel ไม่จริง คุณสามารถลบค่าในฟิลด์ (เซลล์) อย่างไรก็ตาม คุณไม่สามารถ:
  1. ลบเรกคอร์ดทั้งหมดในครั้งเดียว หรือคุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
    การลบข้อมูลในตารางที่เชื่อมโยงไม่ถูกสนับสนุน โดย ISAM นี้
    คุณสามารถลบเรกคอร์ด โดย blanking หาเนื้อหาของฟิลด์แต่ละแต่ละเท่านั้น
  2. ลบค่าในเซลล์ประกอบด้วยเป็นสูตร Excel หรือคุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
    ไม่อนุญาตการดำเนินการในบริบทนี้
  3. คุณไม่สามารถลบแถวกระดาษคำนวณที่ว่างเปล่าซึ่งมีข้อมูลที่ถูกลบที่อยู่ และชุดระเบียนของคุณจะยังคงแสดงระเบียนว่างที่สอดคล้องกับแถวที่ว่างเหล่านี้
มีข้อควรระวังเกี่ยวกับการแก้ไขข้อมูล Excel กับ ADO: เมื่อคุณใส่ข้อมูลของข้อความลงใน Excel ด้วย ADO อยู่ก่อนหน้าค่าข้อความกับใบเสนอราคาหนึ่ง ซึ่งอาจทำให้เกิดปัญหาในการทำงานกับข้อมูลใหม่ในภายหลัง

เรียกดูโครงสร้างของแหล่งข้อมูล (ข้อมูลเมตา) จาก Excel

คุณสามารถเรียกข้อมูลเกี่ยวกับโครงสร้างของแหล่งข้อมูลของ Excel (ตารางและฟิลด์) กับ ADO ผลต่างเล็กน้อยระหว่างผู้ให้การสอง OLE DB บริการ ถึงแม้ว่าทั้งกลับน้อยเล็กจำนวนเขตข้อมูลที่เป็นประโยชน์ของข้อมูล ข้อมูลเมตานี้สามารถถูกดึงด้วยOpenSchemaวิธีการ ADOเชื่อมต่อวัตถุ ซึ่งส่งกลับข้อ ADOชุดระเบียนวัตถุ คุณยังสามารถใช้ส่วนขยายมีประสิทธิภาพมากขึ้น Microsoft ActiveX ข้อมูลวัตถุของสำหรับไลบรารีภาษาข้อกำหนดของข้อมูลและการรักษาความปลอดภัย (ADOX) สำหรับวัตถุประสงค์นี้ ในกรณีของแหล่งข้อมูลมี Excel อย่างไรก็ตาม ซึ่ง "ตาราง" เป็นแผ่นงานหรือช่วงที่มีชื่อ และ "เขตข้อมูล" เป็น datatypes ทั่วไป จำนวนที่จำกัดอย่างใดอย่างหนึ่งพลังงานเพิ่มเติมนี้ไม่มีประโยชน์

รายละเอียดของตารางแบบสอบถาม

ของวัตถุต่าง ๆ มีอยู่ในฐานข้อมูลที่เกี่ยว (ตาราง มุมมอง วิธีการที่เก็บไว้ และอื่น ๆ forth), แหล่งข้อมูลมี Excel exposes เทียบเฉพาะตารางเท่า ประกอบด้วยของแผ่นงานและช่วงที่มีชื่อที่กำหนดไว้ในสมุดงานที่ระบุ ช่วงที่มีชื่อจะถูกจัดการเหมือนเป็น "ตาราง" และแผ่นงานจะถูกจัดการเหมือนเป็น "ตารางระบบ" และไม่ข้อมูลตารางที่มีประโยชน์มากคุณสามารถดึงข้อมูลเกินคุณสมบัตินี้ "table_type" คุณร้องขอรายชื่อของตารางพร้อมใช้งานในสมุดงานที่มีรหัสต่อไปนี้:
Set rs = cn.OpenSchema(adSchemaTables)
				
ชุดระเบียนที่ มี nine (9) ฟิลด์ ซึ่งจะ populates เท่านั้นที่ส่งกลับค่าของผู้ให้บริการ Jet สี่ (4):

  • table_name
  • table_type ("ตาราง" หรือ "ตารางระบบ")
  • date_created
  • date_modified
วันสองฟิลด์สำหรับตารางที่ระบุเสมอแสดงค่าเดียว ซึ่งปรากฏเป็น "วันปรับเปลี่ยนล่าสุด ในอย่างอื่น "date_created" ไม่เชื่อถือ

ผู้ให้บริการ ODBC ชุดระเบียนที่ มี nine (9) ฟิลด์ ซึ่งจะ populates เท่านั้นที่ส่งกลับค่ายังสาม (3):

  • table_catalog โฟลเดอร์ที่สมุดงานที่ตั้งอยู่
  • table_name
  • table_type ตามที่บันทึกไว้ก่อนหน้านี้
ตามที่เอกสารประกอบของ ADO คุณจะสามารถเรียกคืนรายการของแผ่นงานเท่านั้น ตัวอย่างเช่น ด้วยการระบุเกณฑ์เพิ่มเติมต่อไปนี้เพื่อOpenSchemaวิธีการ:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "System Table"))
				
แต่ ซึ่งไม่ทำงานกับแหล่งข้อมูลมี Excel ด้วย MDAC รุ่นหลังจาก 2.0 การใช้ตัวให้บริการการทำงานอย่างใดอย่างหนึ่ง

Query Field Information

Every field (column) in an Excel data source is one of the following datatypes:

  • numeric (ADO datatype 5, adDouble)
  • currency (ADO datatype 6, adCurrency)
  • logical or boolean (ADO datatype 11, adBoolean)
  • date (ADO datatype 7, adDate, using Jet; 135, adDBTimestamp, using ODBC)
  • text (an ADO ad...Char type, such as 202, adVarChar, 200, adVarWChar or similar)
The numeric_precision for a numeric column is always returned as 15 (which is the maximum precision in Excel); the character_maximum_length of a text column is always returned as 255 (which is the maximum display width, but not the maximum length, of text in an Excel column). There is not much useful field information that you can obtain beyond thedata_typeคุณสมบัติ You request a list of the available fields in a table with the following code:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, "TableName", Empty))
				
The Jet Provider returns a recordset that contains 28 fields, of which it populates eight (8) for numeric fields and nine (9) for text fields. The useful fields are likely to be these:

  • table_name
  • column_name
  • ordinal_position
  • data_type
The ODBC Provider returns a recordset containing 29 fields, of which it populates ten (10) for numeric fields and 11 for text fields. The useful fields are the same as earlier.

Enumerate Tables and Fields and Their Properties

Visual Basic code (such as the following sample) can be used to enumerate the tables and columns in an Excel data source and the available fields of information about each. This sample outputs its results to a Listbox, List1, on the same form.
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
				

Use the Data View Window

If you create a data link to an Excel data source in the Visual Basic Data View window, the Data View window displays the same information that you can retrieve programmatically as described earlier. In particular, note that the Jet Provider lists both worksheets and named ranges under "Tables," where the ODBC Provider shows only named ranges. If you are using the ODBC Provider and have not defined any named ranges, the "Tables" list will be empty.

Excel Limitations

The use of Excel as a data source is bound by the internal limitations of Excel workbooks and worksheets. These include, but are not limited to:

  • Worksheet size: 65,536 rows by 256 columns
  • Cell contents (text): 32,767 characters
  • Sheets in a workbook: limited by available memory
  • Names in a workbook: limited by available memory

ข้อมูลอ้างอิง

For additional information about how to use ADO.NET to retrieve and modify records in an Excel workbook with Visual Basic .NET, click the following article number to view the article in the Microsoft Knowledge Base:
316934How To Use ADO.NET to Retrieve and Modify Records in an Excel Workbook With Visual Basic .NET
For additional information, click the article numbers below to view the articles in the Microsoft Knowledge Base:
295646How To Transfer Data from ADO Data Source to Excel with ADO
246335How To Transfer Data from ADO Recordset to Excel with Automation
247412ข้อมูล: วิธีการถ่ายโอนข้อมูลไปยัง Excel จาก Visual Basic
278973ตัวอย่าง: ExcelADO อธิบายวิธีการที่ใช้ ADO ในการอ่าน และเขียนข้อมูลในสมุดงาน Excel
318373วิธีการเรียกข้อมูลเมตาจาก Excel โดยใช้วิธีการ GetOleDbSchemaTable ใน Visual Basic .NET

คุณสมบัติ

หมายเลขบทความ (Article ID): 257819 - รีวิวครั้งสุดท้าย: 17 กันยายน 2554 - Revision: 3.0
ใช้กับ
  • 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
Keywords: 
kbhowto kbiisam kbmt KB257819 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:257819

ให้ข้อเสนอแนะ

 

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