วิธีการถ่ายโอนข้อมูลไปยังสมุดงาน Excel โดยใช้ Visual Basic .NET

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 306022 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
สำหรับรุ่น Microsoft Visual c# .NET ของบทความนี้ ดู306023.
ขยายทั้งหมด | ยุบทั้งหมด

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

สรุป

บทความที่มีการทีละขั้นตอนนี้อธิบายวิธีการต่าง ๆ สำหรับการโอนย้ายข้อมูลไปยัง Excel 2002 จากโปรแกรม Visual Basic .NET บทความนี้ยังแสดงข้อดีและข้อเสียของแต่ละวิธีเพื่อให้คุณสามารถเลือกวิธีการแก้ไขปัญหาที่เหมาะสมของสถานการณ์การทำงาน

ภาพรวม

เป็นเทคนิคหนึ่งที่ใช้งานบ่อยที่สุดในการถ่ายโอนข้อมูลไปยังสมุดงาน Excelดำเนินการอัตโนมัติ. ด้วยการทำงานอัตโนมัติ คุณสามารถเรียกวิธีและคุณสมบัติที่ระบุเฉพาะถึงงานของ Excel ดำเนินการอัตโนมัติช่วยให้คุณมีความยืดหยุ่นมากที่สุดสำหรับการระบุตำแหน่งที่ตั้งของข้อมูลในสมุดงาน และความสามารถในการจัดรูปแบบสมุดงาน และทำการตั้งค่าต่าง ๆ ในขณะดำเนินการ

ด้วยการทำงานอัตโนมัติ คุณสามารถใช้เทคนิคต่าง ๆ เพื่อถ่ายโอนข้อมูลของคุณ:
  • การถ่ายโอนข้อมูลเซลล์ตามเซลล์
  • ถ่ายโอนข้อมูลในอาร์เรย์ไปยังช่วงของเซลล์
  • การถ่ายโอนข้อมูลในชุดระเบียน ADO ไปยังช่วงของเซลล์ โดยใช้การCopyFromRecordsetวิธีการ
  • สร้างคำQueryTableวัตถุบนแผ่นงาน Excel ที่ประกอบด้วยผลลัพธ์ของแบบสอบถามในแหล่งข้อมูลมี ODBC หรือ OLEDB
  • การถ่ายโอนข้อมูลไปยังคลิปบอร์ด และวางเนื้อหาของคลิปบอร์ดไปแผ่นงาน Excel
คุณยังสามารถใช้วิธีการต่าง ๆ ที่ไม่จำเป็นต้องทำงานอัตโนมัติเพื่อโอนย้ายข้อมูลไปยัง Excel ถ้าคุณกำลังเรียกใช้โปรแกรมฝั่งเซิร์ฟเวอร์ ซึ่งจะเป็นวิธีที่ดีสำหรับการใช้ขนาดใหญ่ของการประมวลผลข้อมูลออกจากเครื่องไคลเอนต์ของคุณ

approaches ที่ต่อไปนี้อาจใช้ในการถ่ายโอนข้อมูลของคุณโดยไม่ทำงานอัตโนมัติ:
  • ถ่ายโอนข้อมูลของคุณเพื่อกำหนดแท็บ หรือเครื่องหมายจุลภาคเขตแฟ้มข้อความที่ Excel สามารถแยกวิเคราะห์ในภายหลังลงในเซลล์บนแผ่นงาน
  • การโอนย้ายข้อมูลของคุณไปยังแผ่นงานที่ใช้ ADO.NET
  • การถ่ายโอนข้อมูล XML ไปยัง Excel (รุ่น 2002 เท่านั้น) เพื่อให้ข้อมูลที่มีการจัดรูปแบบ และจัดเรียงในแถวและคอลัมน์

เทคนิค

ใช้การทำงานอัตโนมัติในการถ่ายโอนข้อมูลเซลล์ตามเซลล์

ด้วยการทำงานอัตโนมัติ คุณสามารถถ่ายโอนข้อมูลไปยังเซลล์หนึ่งแผ่นงานครั้ง ดังนั้น
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Add data to cells of the first worksheet in the new workbook.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Last Name"
        oSheet.Range("B1").Value = "First Name"
        oSheet.Range("A1:B1").Font.Bold = True
        oSheet.Range("A2").Value = "Doe"
        oSheet.Range("B2").Value = "John"

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book1.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				
กำลังถ่ายโอนข้อมูลเซลล์ด้วยเซลล์จะเป็นวิธีที่ยอมรับได้ถ้ามีไม่ข้อมูลมากในการถ่ายโอน คุณมีความยืดหยุ่นทำให้ข้อมูลไว้ในสมุดงาน และสามารถจัดรูปแบบเซลล์ conditionally ในขณะดำเนินการ อย่างไรก็ตาม วิธีการนี้ไม่แนะนำถ้าคุณมีจำนวนมากข้อมูลเพื่อโอนย้ายไป Excel สมุดงาน แต่ละช่วงวัตถุที่คุณได้รับในขณะดำเนินผลการร้องขออินเทอร์เฟซ ดังนั้น กำลังถ่ายโอนข้อมูลในลักษณะนี้สามารถใช้เวลานานขึ้น
นอกจากนี้ Microsoft Windows 95, Microsoft Windows 98 และ Microsoft Windows Millennium Edition (Me) มีข้อจำกัดแบบ 64 กิโลบนอินเทอร์เฟซการร้องขอ ถ้าคุณมีกิโลไบต์ 64 หรือเพิ่มเติมของการร้องขออินเทอร์เฟซ เซิร์ฟเวอร์ Automation (Excel) อาจหยุดการตอบสนอง หรือคุณอาจได้รับข้อความแสดงข้อผิดพลาดที่ระบุหน่วยความจำเหลือน้อยสำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
216400กระบวนการหว่าง COM Automation สามารถวางแอพลิเคชันไคลเอนต์บน Win95/98
อีกครั้ง การโอนย้ายข้อมูลเซลล์ด้วยเซลล์ได้ยอมรับได้สำหรับยอดเงินที่ขนาดเล็กของข้อมูลเท่านั้น ถ้าคุณต้องโอนย้ายชุดข้อมูลขนาดใหญ่ไปที่ Excel ให้ลองใช้ approaches อื่น ๆ ที่กล่าวถึงในบทความนี้เพื่อโอนย้ายข้อมูลเป็นกลุ่ม อย่างใดอย่างหนึ่ง

สำหรับข้อมูลเพิ่มเติม และ สำหรับตัวอย่างของวิธีการทำให้ Excel กับ Visual Basic .NET คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
301982How to automate Microsoft Excel from Visual Basic .NET

Use Automation to transfer an array of data to a range on a worksheet

An array of data can be transferred to a range of multiple cells at the same time, as follows.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Create an array with 3 columns and 100 rows.
        Dim DataArray(99, 2) As Object
        Dim r As Integer
        For r = 0 To 99
            DataArray(r, 0) = "ORD" & Format(r + 1, "0000")
            DataArray(r, 1) = Rnd() * 1000
            DataArray(r, 2) = DataArray(r, 1) * 0.07
        Next

        'Add headers to the worksheet on row 1.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Order ID"
        oSheet.Range("B1").Value = "Amount"
        oSheet.Range("C1").Value = "Tax"

        'Transfer the array to the worksheet starting at cell A2.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray

        'Save the Workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book2.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				
If you transfer data by using an array instead of cell by cell, you can realize an enormous performance gain with a lot of data. Consider this line from the earlier code, which transfers data to 300 cells in the worksheet.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray
				
This line represents two interface requests: one for theช่วงวัตถุที่จะช่วงmethod returns, and another for theช่วงวัตถุที่จะปรับขนาดmethod returns. In contrast, transferring the data cell by cell requires requests for 300 interfaces toช่วงวัตถุ เมื่อใดก็ ตามที่เป็นไปได้ คุณสามารถได้รับประโยชน์จากการโอนย้ายข้อมูลของคุณเป็นกลุ่ม และการลดจำนวนที่ใช้ในการร้องขออินเทอร์เฟซที่คุณทำ

Use Automation to transfer an ADO recordset to a worksheet range

The object models for Excel 2000 and Excel 2002 provide theCopyFromRecordsetmethod for transferring an ADO recordset to a range on a worksheet. The following code illustrates how to automate Excel to transfer the contents of the Orders table in the Northwind sample database by using theCopyFromRecordsetวิธีการ
        'Create a Recordset from all the records in the Orders table.
        Dim sNWind As String
        Dim conn As New ADODB.Connection()
        Dim rs As ADODB.Recordset
        conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            sNorthwind & ";")
        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
        rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)

        'Create a new workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)

        'Transfer the field names to Row 1 of the worksheet:
        'Note: CopyFromRecordset copies only the data and not the field
        '      names, so you can transfer the fieldnames by traversing the
        '      fields collection.
        Dim n As Int32
        For n = 1 To rs.Fields.Count
            oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name
        Next

        'Transfer the data to Excel.
        oSheet.Range("A2").CopyFromRecordset(rs)

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book3.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()

        'Close the connection
        rs.Close()
        conn.Close()
				
หมายเหตุ:CopyFromRecordsetworks only with ADOชุดระเบียนวัตถุ aชุดข้อมูลthat you create by using ADO.NET cannot be used with theCopyFromRecordsetวิธีการ Several examples in the sections that follow demonstrate how to transfer data to Excel with ADO.NET.

Use Automation to create a QueryTable object on a worksheet

aQueryTableobject represents a table that is built from data that is returned from an external data source. While you automate Excel, you can create aQueryTableby providing a connection string to an OLEDB or an ODBC data source and a SQL string. Excel generates the recordset and inserts the recordset into the worksheet at the location that you specify. การใช้QueryTableobjects offers the following advantages over theCopyFromRecordsetวิธีการ:
  • Excel handles the creation of the recordset and its placement into the worksheet.
  • The query can be saved with theQueryTableobject so that it can be refreshed later to obtain an updated recordset.
  • When a newQueryTableis added to your worksheet, you can specify that data already existing in cells on the worksheet be shifted to fit the new data (see theRefreshStyleproperty for details).
The following code demonstrates how to automate Excel 2000 or 2002 to create a newQueryTablein an Excel worksheet by using data from the Northwind sample database.
        'Create a new workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(1)

        'Create the QueryTable object.
        Dim oQryTable As Object
        oQryTable = oSheet.QueryTables.Add( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            sNorthwind & ";", oSheet.Range("A1"), _
            "Select * from Orders")
        oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2
        oQryTable.Refresh(False)

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book4.xls")
        oQryTable = Nothing
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
				

Use the Clipboard

You can use the Clipboard to transfer data to a worksheet. To paste data into multiple cells on a worksheet, you can copy a string in which columns are delimited by tab characters, and rows are delimited by carriage returns. The following code illustrates how Visual Basic .NET uses the Clipboard to transfer data to Excel.
        'Copy a string to the Clipboard.
        Dim sData As String
        sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
            & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
            & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
        System.Windows.Forms.Clipboard.SetDataObject(sData)

        'Create a workbook in Excel.
        Dim oExcel As Object
        Dim oBook As Object
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Paste the data.
        oBook.Worksheets(1).Range("A1").Select()
        oBook.Worksheets(1).Paste()

        'Save the workbook and quit Excel.
        oBook.SaveAs(sSampleFolder & "Book5.xls")
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				

Create a delimited text file that Excel can parse into rows and columns

Excel can open tab-delimited files or comma-delimited files and correctly parse the data into cells. You can use this feature when you want to transfer a lot of data to a worksheet while using little, if any, Automation. This may be a good approach for a client-server program, because the text file can be generated server-side. You can then open the text file at the client, using Automation where it is appropriate.

The following code illustrates how to generate a tab-delimited text file from data that is read with ADO.NET.
        'Connect to the data source.
        Dim objConn As New System.Data.OleDb.OleDbConnection( _
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")
        objConn.Open()

        'Execute a command to retrieve all records from the Employees table.
        Dim objCmd As New System.Data.OleDb.OleDbCommand( _
            "Select * From Employees", objConn)
        Dim objReader As System.Data.OleDb.OleDbDataReader
        objReader = objCmd.ExecuteReader()

        'Read the records in the dataset and write select fields to the 
        'output file.
        FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)
        Dim i As Integer, s As String
        While objReader.Read()
            'Loop through first 6 fields and concatenate
            'each field, separated by a tab, into s variable.
            s = ""
            For i = 0 To 5
                If Not objReader.IsDBNull(i) Then
                    If i = 0 Then 'field 1 is EmployeeId
                        s = s & objReader.GetInt32(i).ToString
                    ElseIf i = 5 Then 'field 6 is BirthDate
                        s = s & objReader.GetDateTime(i)
                    Else 'field is a text field
                        s = s & objReader.GetString(i)
                    End If
                End If
                s = s & Microsoft.VisualBasic.ControlChars.Tab
            Next
            PrintLine(1, s)
        End While
        FileClose(1)

        'Close the reader and the connection.
        objReader.Close()
        objConn.Close()
				
No Automation was used in the previous code. However, you can use minimal Automation to open the text file and save the file in the Excel workbook format, as follows.
        'Create a new instance of Excel.
        Dim oExcel As Object
        oExcel = CreateObject("Excel.Application")

        'Open the text file and save it in the Excel workbook format.
        oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _
            , , , -4142, , True) 'xlTextQualifierNone=-4142

        oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _
            -4143) 'xlWorkbookNormal = -4143

        'Quit Excel.
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
				

Transfer data to a worksheet by using ADO.NET

You can use the Microsoft Jet OLE DB provider to add records to a table in an existing Excel workbook. A "table" in Excel is merely a range of cells; the range may have a defined name. Typically, the first row of the range contains the headers (or field names), and all later rows in the range contain the records.

The following code adds two new records to a table in Book7.xls. The table in this case is Sheet1.
       'Establish a connection to the data source.
        Dim sConnectionString As String
        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & sSampleFolder & _
            "Book7.xls;Extended Properties=Excel 8.0;"
        Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)
        objConn.Open()

        'Add two records to the table.
        Dim objCmd As New System.Data.OleDb.OleDbCommand()
        objCmd.Connection = objConn
        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
            " values ('Bill', 'Brown')"
        objCmd.ExecuteNonQuery()
        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
            " values ('Joe', 'Thomas')"
        objCmd.ExecuteNonQuery()

        'Close the connection.
        objConn.Close()
				
When you add records with ADO.NET as shown, the formatting in the workbook is maintained. Each record that is added to a row borrows the format from the row before it. For example, new fields that are added to column B are formatted with right alignment because cell B1 is right-aligned.

บันทึกย่อที่เขียนว่า เมื่อระเบียนถูกเพิ่มเข้าไปยังเซลล์หรือเซลล์ในแผ่นงาน มันทับข้อมูลใด ๆ ที่เซลล์เหล่านั้นอยู่ก่อนหน้านี้ ผลักในอย่างอื่น แถวในแผ่นงานจะไม่ "ดันลง" เมื่อมีเพิ่มระเบียนใหม่ เก็บนี้โปรดระลึกไว้เมื่อคุณออกแบบโครงร่างของข้อมูลบนแผ่นงานของคุณถ้าคุณวางแผนที่จะเร็กคอร์ดที่แทรกใหม่ โดยใช้ ADO.NET

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้ ADO.NET คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
301075วิธีการเชื่อมต่อกับฐานข้อมูล และเรียกใช้คำสั่ง โดยใช้ ADO.NET และ Visual Basic .NET
301216วิธีการเติมข้อมูลวัตถุเป็นชุดข้อมูลจากฐานข้อมูล โดยใช้ Visual Basic .NET
301248วิธีการปรับปรุงฐานข้อมูลจากวัตถุเป็นชุดข้อมูล โดยใช้ Visual Basic .NET
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้ตัวให้บริการ Jet OLE DB กับแหล่งข้อมูลของ Excel คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
278973ExcelADO อธิบายวิธีใช้ ADO ในการอ่าน และเขียนข้อมูลในสมุดงาน Excel
257819วิธีการใช้ ADO กับข้อมูล Excel จาก Visual Basic หรือ VBA

การถ่ายโอนข้อมูล XML (Excel 2002 เท่านั้น)

Excel 2002 สามารถเปิดแฟ้ม XML ที่ well-formed สามารถเปิดแฟ้ม XML โดยตรงจากนั้นOPENคำสั่งในการแฟ้ม:เมนู หรือโดยทางโปรแกรม โดยใช้การOPENหรือOpenXMLวิธีการนี้สมุดงานคอลเลกชัน ถ้าคุณสร้างแฟ้ม XML สำหรับการใช้งานใน Excel คุณสามารถสร้างสไตล์ชีเพื่อจัดรูปแบบข้อมูล

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้ XML กับ Excel 2002 คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
307021วิธีการถ่ายโอนข้อมูล XML ไปยัง Microsoft Excel 2002 โดยใช้ Visual Basic .NET
288215Microsoft Excel 2002 และ XML

สร้างโครงการ Visual Basic .NET อย่างสมบูรณ์

  1. Create a new folder to hold the Excel workbooks that the sample will create for you, and then name the folder C:\Exceldata\.
  2. Follow these steps to create a new workbook for the sample to write to:
    1. เริ่มต้นสมุดงานใหม่ใน Excel
    2. On Sheet1 of the new workbook, typeFirstNamein cell A1 andLastNamein cell A2.
    3. Save the workbook as C:\Exceldata\Book7.xls.
  3. เริ่ม Visual Studio .NET ในการแฟ้ม:เมนู คลิกใหม่แล้ว คลิกProject. ภายใต้โครงการ visual Basicเลือกแอพลิเคชันของ windows. โดยค่าเริ่มต้นแล้ว Form1 จะถูกสร้างขึ้น
  4. Add a reference to the Excel object library. โดยให้ทำตามขั้นตอนต่อไปนี้::
    1. ในการProjectเมนู คลิกเพิ่มการอ้างอิง.
    2. ในการcomแท็บ ค้นหาการไลบรารีวัตถุ Microsoft Excel 10.0แล้ว คลิกเลือก.

      หมายเหตุ:If you have not already done so, Microsoft recommends that you download and then install the Microsoft Office XP Primary Interop Assemblies (PIAs).สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Office XP PIAs คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
      328912Microsoft Office XP primary interop assemblies (PIAs) are available for download
    3. ในการcomแท็บ ค้นหาMicrosoft ActiveX Data Objects 2.7 Libraryแล้ว คลิกเลือก.
    4. คลิกตกลงในการเพิ่มการอ้างอิงกล่องโต้ตอบเพื่อยอมรับการเลือกของคุณ ถ้าคุณได้รับการพรอมต์เพื่อสร้าง wrappers สำหรับไลบรารีที่คุณเลือก คลิกใช่.
  5. เพิ่มคำCombo Boxตัวควบคุม และ aปุ่มควบคุมการ Form1
  6. เพิ่มรหัสต่อไปนี้ลงใน Form1
        Const sSampleFolder = "C:\ExcelData\"
        Const sNorthwind = "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
          Handles MyBase.Load
            ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            Dim aList As String() = _
                {"Use Automation to Transfer Data Cell by Cell ", _
                 "Use Automation to Transfer an Array of Data to a Range on a Worksheet ", _
                 "Use Automation to Transfer an ADO Recordset to a Worksheet Range ", _
                 "Use Automation to Create a QueryTable on a Worksheet", _
                 "Use the Clipboard", _
                 "Create a Delimited Text File that Excel Can Parse into Rows and Columns", _
                 "Transfer Data to a Worksheet Using ADO.NET "}
            ComboBox1.Items.AddRange(aList)
            ComboBox1.SelectedIndex = 0
            Button1.Text = "Go!"
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
          Handles Button1.Click
            Select Case ComboBox1.SelectedIndex
                Case 0 : Automation_CellByCell()
                Case 1 : Automation_UseArray()
                Case 2 : Automation_ADORecordset()
                Case 3 : Automation_QueryTable()
                Case 4 : Use_Clipboard()
                Case 5 : Create_TextFile()
                Case 6 : Use_ADONET()
            End Select
            GC.Collect()
        End Sub
    
        Private Function Automation_CellByCell()
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
    
            'Start a new workbook in Excel.
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Add data to cells of the first worksheet in the new workbook.
            oSheet = oBook.Worksheets(1)
            oSheet.Range("A1").Value = "Last Name"
            oSheet.Range("B1").Value = "First Name"
            oSheet.Range("A1:B1").Font.Bold = True
            oSheet.Range("A2").Value = "Doe"
            oSheet.Range("B2").Value = "John"
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book1.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Automation_UseArray()
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
    
            'Start a new workbook in Excel.
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Create an array with 3 columns and 100 rows.
            Dim DataArray(99, 2) As Object
            Dim r As Integer
            For r = 0 To 99
                DataArray(r, 0) = "ORD" & Format(r + 1, "0000")
                DataArray(r, 1) = Rnd() * 1000
                DataArray(r, 2) = DataArray(r, 1) * 0.07
            Next
    
            'Add headers to the worksheet on row 1.
            oSheet = oBook.Worksheets(1)
            oSheet.Range("A1").Value = "Order ID"
            oSheet.Range("B1").Value = "Amount"
            oSheet.Range("C1").Value = "Tax"
    
            'Transfer the array to the worksheet starting at cell A2.
            oSheet.Range("A2").Resize(100, 3).Value = DataArray
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book2.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Automation_ADORecordset()
            'Create a Recordset from all the records in the Orders table.
            Dim sNWind As String
            Dim conn As New ADODB.Connection()
            Dim rs As ADODB.Recordset
            conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                sNorthwind & ";")
            conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
            rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)
    
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
            oSheet = oBook.Worksheets(1)
    
            'Transfer the field names to Row 1 of the worksheet:
            'Note: CopyFromRecordset copies only the data and not the field
            '      names, so you can transfer the fieldnames by traversing the
            '      fields collection.
            Dim n As Int32
            For n = 1 To rs.Fields.Count
                oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name
            Next
    
            'Transfer the data to Excel.
            oSheet.Range("A2").CopyFromRecordset(rs)
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book3.xls")
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
    
            'Close the connection.
            rs.Close()
            conn.Close()
        End Function
    
        Private Function Automation_QueryTable()
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
            oSheet = oBook.Worksheets(1)
    
            'Create the QueryTable object.
            Dim oQryTable As Object
            oQryTable = oSheet.QueryTables.Add( _
            "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                sNorthwind & ";", oSheet.Range("A1"), _
                "Select * from Orders")
            oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2
            oQryTable.Refresh(False)
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book4.xls")
            oQryTable = Nothing
            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
    
    
            oExcel = Nothing
    
        End Function
    
        Private Function Use_Clipboard()
            'Copy a string to the clipboard.
            Dim sData As String
            sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
                & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
                & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
            System.Windows.Forms.Clipboard.SetDataObject(sData)
    
            'Create a new workbook in Excel.
            Dim oExcel As Object
            Dim oBook As Object
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
    
            'Paste the data.
            oBook.Worksheets(1).Range("A1").Select()
            oBook.Worksheets(1).Paste()
    
            'Save the workbook and quit Excel.
            oBook.SaveAs(sSampleFolder & "Book5.xls")
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Create_TextFile()
            'Connect to the data source.
            Dim objConn As New System.Data.OleDb.OleDbConnection( _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")
            objConn.Open()
    
            'Run a command to retrieve all records from the Employees table.
            Dim objCmd As New System.Data.OleDb.OleDbCommand( _
                "Select * From Employees", objConn)
            Dim objReader As System.Data.OleDb.OleDbDataReader
            objReader = objCmd.ExecuteReader()
    
            'Read the records in the dataset and write select fields to the 
            'output file.
            FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)
            Dim i As Integer, s As String
            While objReader.Read()
                'Loop through first 6 fields and concatenate
                'each field, separated by a tab, into s variable.
                s = ""
                For i = 0 To 5
                    If Not objReader.IsDBNull(i) Then
                        If i = 0 Then 'field 1 is EmployeeId
                            s = s & objReader.GetInt32(i).ToString
                        ElseIf i = 5 Then 'field 6 is BirthDate
                            s = s & objReader.GetDateTime(i)
                        Else 'field is a text field
                            s = s & objReader.GetString(i)
                        End If
                    End If
                    s = s & Microsoft.VisualBasic.ControlChars.Tab
                Next
                PrintLine(1, s)
            End While
            FileClose(1)
    
            'Close the reader and the connection.
            objReader.Close()
            objConn.Close()
    
            'Create a new instance of Excel.
            Dim oExcel As Object
            oExcel = CreateObject("Excel.Application")
    
            'Open the text file and save it in the Excel workbook format.
            oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _
                , , , -4142, , True) 'xlTextQualifierNone=-4142
    
            oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _
                -4143) 'xlWorkbookNormal = -4143
    
            'Quit Excel.
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()
        End Function
    
        Private Function Use_ADONET()
    
            'Verify that the workbook to write to does exist.
            Dim sFile As String = sSampleFolder & "Book7.xls"
            If Dir(sFile) = "" Then
                MsgBox("Please create the workbook Book7.xls and try again.")
                Exit Function
            End If
    
            'Establish a connection to the data source.
            Dim sConnectionString As String
            sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & sSampleFolder & _
                "Book7.xls;Extended Properties=Excel 8.0;"
            Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)
            objConn.Open()
    
            'Add two records to the table named 'MyTable'.
            Dim objCmd As New System.Data.OleDb.OleDbCommand()
            objCmd.Connection = objConn
            objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
                " values ('Bill', 'Brown')"
            objCmd.ExecuteNonQuery()
            objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _
                " values ('Joe', 'Thomas')"
            objCmd.ExecuteNonQuery()
    
            'Close the connection.
            objConn.Close()
        End Function
    					
    หมายเหตุ:If you did not install Office to the default folder (C:\Program Files\Microsoft Office), change thesNorthwindconstant in the code sample to match your installation path for Northwind.mdb.

  7. Add the following code to the top of Form1.vb.
    Imports Microsoft.Office.Interop
    					
  8. Press F5 to build and then run the sample.

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

For more information, visit the following Microsoft Developer Network (MSDN) Web site:
.aspx http://msdn2.microsoft.com/en-us/library/aa188489 (office.10)
สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
247412วิธีการถ่ายโอนข้อมูลไปยัง Excel จาก Visual Basic

คุณสมบัติ

หมายเลขบทความ (Article ID): 306022 - รีวิวครั้งสุดท้าย: 10 มกราคม 2554 - Revision: 4.0
ใช้กับ
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbautomation kbhowtomaster kbmt KB306022 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:306022

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

 

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