Làm th? nào đ? chuy?n d? li?u vào m?t b?ng tính Excel b?ng cách s? d?ng Visual Basic.net

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 306022 - Xem s?n ph?m mà bài này áp d?ng vào.
M?t phiên b?n Microsoft Visual C# .NET c?a bài vi?t này, xin xem 306023.
Bung t?t c? | Thu g?n t?t c?

? Trang này

Tóm t?t

Bài vi?t t?ng bư?c này mô t? m?t s? phương pháp đ? chuy?n d? li?u đ?n Excel 2002 t? m?t chương tr?nh Visual Basic.net. Bài vi?t này c?ng tr?nh bày nh?ng l?i th? và b?t l?i c?a m?i phương pháp do đó b?n có th? ch?n gi?i pháp phù h?p nh?t cho t?nh h?nh c?a b?n.

T?ng quan

Các k? thu?t đư?c s? d?ng thư?ng xuyên nh?t đ? chuy?n d? li?u vào m?t b?ng tính Excel là t? đ?ng hóa. V?i t? đ?ng hóa, b?n có th? g?i phương pháp và các thu?c tính c? th? cho Excel nhi?m v?. T? đ?ng hóa cung c?p cho b?n s? linh ho?t l?n nh?t đ? ch? đ?nh v? trí d? li?u trong b?ng tính, và kh? năng đ?nh d?ng b?ng tính và th?c hi?n cài đ?t chuyên bi?t khác nhau t?i th?i gian ch?y.

V?i t? đ?ng hóa, b?n có th? s? d?ng m?t s? k? thu?t đ? chuy?n d? li?u c?a b?n:
  • Chuy?n d? li?u di đ?ng c?a t? bào.
  • Chuy?n d? li?u vào m?t m?ng đ? m?t lo?t các t? bào.
  • D? li?u trong m?t ADO recordset sang m?t lo?t các t? bào byusing phương pháp CopyFromRecordset .
  • T?o m?t đ?i tư?ng QueryTable trên m?t b?ng tính Excel có ch?a k?t qu? c?a m?t queryon ngu?n d? li?u ODBC ho?c OLEDB.
  • Chuy?n d? li?u vào clipboard, và sau đó dán n?i dung theclipboard vào m?t b?ng tính Excel.
B?n c?ng có th? s? d?ng m?t s? phương pháp không nh?t thi?t ph?i yêu c?u t? đ?ng hóa đ? chuy?n d? li?u sang Excel. N?u b?n đang ch?y m?t chương tr?nh phía máy ch?, đi?u này có th? là m?t cách ti?p c?n t?t đ? dành ph?n l?n x? lí d? li?u t? khách hàng c?a b?n.

Các phương pháp sau đây có th? đư?c dùng đ? chuy?n d? li?u c?a b?n mà không có t? đ?ng hóa:
  • Chuy?n d? li?u c?a b?n đ? filethat văn b?n tab ho?c d?u ki?m ph?y phân cách có Excel có th? sau đó phân tích vào các t? bào trên m?t b?ng tính.
  • Chuy?n d? li?u vào m?t b?ng tính b?ng cách s? d?ng ADO.NET.
  • Chuy?n d? li?u XML sang Excel (Phiên b?n 2002) đ? providedata mà đ?nh d?ng và s?p x?p thành hàng và c?t.

K? thu?t

S? d?ng t? đ?ng hóa đ? truy?n d? li?u t? bào b?i các t? bào

V?i t? đ?ng hóa, b?n có th? chuy?n d? li?u sang m?t t? bào b?ng m?t lúc m?t th?i gian, như sau.
        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()
				
Chuy?n d? li?u t? bào b?i các t? bào có th? là m?t cách ti?p c?n ch?p nh?n đư?c n?u không có nhi?u d? li?u đ? chuy?n. B?n có s? linh ho?t đ? đ?t d? li?u b?t c? nơi nào vào b?ng tính và có th? đ?nh d?ng các t? bào có đi?u ki?n t?i th?i gian ch?y. Tuy nhiên, phương pháp này không đư?c khuy?n khích n?u b?n có r?t nhi?u d? li?u đ? chuy?n đ?n m?t b?ng tính Excel. M?i đ?i tư?ng ph?m vi mà b?n có đư?c t?i th?i gian ch?y k?t qu? trong m?t yêu c?u giao di?n. V? v?y, chuy?n giao d? li?u theo cách này có th? đư?c làm ch?m.
Ngoài ra, Microsoft Windows 95, Microsoft Windows 98 và Microsoft Windows Millennium Edition (Me) có m?t gi?i h?n 64 KB trên giao di?n yêu c?u. N?u b?n có 64 KB ho?c nhi?u hơn các yêu c?u giao di?n, máy ch? t? đ?ng hóa (Excel) có th? ng?ng đáp ?ng, ho?c b?n có th? nh?n đư?c thông báo l?i cho bi?t thi?u b? nh?. Đ? bi?t thêm chi ti?t, nh?p vào s? bài vi?t sau đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
216400 Cross-quá tr?nh t? đ?ng hóa COM có th? treo khách hàng ?ng d?ng trên Win95/98
M?t l?n n?a, chuy?n giao d? li?u t? bào b?i các t? bào là ch?p nh?n đư?c ch? cho m?t lư?ng nh? d? li?u. N?u b?n ph?i chuy?n t?p d? li?u l?n đ? Excel, xem xét s? d?ng m?t trong các phương pháp khác đư?c th?o lu?n trong bài vi?t này đ? truy?n d? li?u v?i s? lư?ng l?n.

Đ? bi?t thêm thông tin, và cho m?t ví d? v? làm th? nào đ? t? đ?ng hoá Excel v?i Visual Basic.net, nh?p vào s? bài vi?t sau đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
301982 Làm th? nào đ? t? đ?ng hoá Microsoft Excel t? Visual Basic.net

S? d?ng t? đ?ng hóa đ? chuy?n m?t lo?t các d? li?u vào m?t ph?m vi trên m?t b?ng tính

M?t lo?t các d? li?u có th? đư?c chuy?n giao cho m?t lo?t các t? bào nhi?u cùng m?t lúc, như sau.
        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()
				
N?u b?n chuy?n d? li?u b?ng cách s? d?ng m?t m?ng thay v? t? bào b?i các t? bào, b?n có th? nh?n ra m?t đ?t đư?c hi?u su?t r?t l?n v?i r?t nhi?u d? li?u. Xem xét này d?ng t? m? trư?c đó, chuy?n d? li?u cho các t? bào 300 trong b?ng tính.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray
				
D?ng này đ?i di?n cho hai giao di?n yêu c?u: m?t cho đ?i tư?ng ph?m viph?m vi phương pháp tr? v?, và m?t cho đ?i tư?ng ph?m vi mà tr? v? phương pháp thay đ?i kích c? . Ngư?c l?i, chuy?n giao d? li?u di đ?ng b?i di đ?ng đ?i h?i yêu c?u cho 300 giao di?n cho các đ?i tư?ng ph?m vi . B?t c? khi nào có th?, b?n có th? hư?ng l?i t? chuy?n d? li?u c?a b?n v?i s? lư?ng l?n và gi?m s? lư?ng yêu c?u giao di?n b?n th?c hi?n.

S? d?ng t? đ?ng hóa đ? chuy?n m?t ADO recordset đ?n m?t lo?t các b?ng tính

Các mô h?nh đ?i tư?ng cho Excel 2000 và Excel 2002 cung c?p phương pháp CopyFromRecordset đ? chuy?n m?t ADO recordset đ?n m?t ph?m vi trên m?t b?ng tính. M? sau đây minh h?a làm th? nào đ? t? đ?ng hoá Excel đ? chuy?n n?i dung c?a b?ng đơn đ?t hàng trong b? máy cơ s? d? li?u m?u Northwind b?ng cách s? d?ng phương pháp CopyFromRecordset .
        '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()
				
Lưu ?CopyFromRecordset làm vi?c ch? v?i ADO Recordset các đ?i tư?ng. M?t b? d? li?u mà b?n t?o ra b?ng cách s? d?ng ADO.NET không th? đư?c s? d?ng v?i phương pháp CopyFromRecordset . M?t vài ví d? trong các ph?n theo ch?ng minh làm th? nào đ? chuy?n d? li?u sang Excel v?i ADO.NET.

S? d?ng t? đ?ng hóa đ? t?o ra m?t đ?i tư?ng QueryTable trên m?t b?ng tính

M?t đ?i tư?ng QueryTable đ?i di?n cho m?t b?ng đư?c xây d?ng t? d? li?u đư?c tr? l?i t? m?t nguồn dữ liệu ngoài. Trong khi b?n t? đ?ng Excel, b?n có th? t?o ra m?t QueryTable b?ng cách cung c?p m?t chu?i k?t n?i đ?n m?t OLEDB ho?c ngu?n d? li?u ODBC và m?t chu?i SQL. Excel t?o ra recordset và chèn recordset vào b?ng tính t?i v? trí mà b?n ch? đ?nh. S? d?ng các đ?i tư?ng QueryTable cung c?p nh?ng ưu đi?m sau trong phương pháp CopyFromRecordset :
  • Excel x? l? vi?c t?o ra các recordset và itsplacement vào b?ng tính.
  • Các truy v?n có th? đư?c lưu v?i các đ?i tư?ng QueryTable đ? nó có th? đư?c làm m?i sau đó đ? có đư?c m?t updatedrecordset.
  • Khi m?t m?i QueryTable đư?c thêm vào b?ng tính c?a b?n, b?n có th? xác đ?nh d? li?u đó alreadyexisting trong các t? bào trên b?ng tính đư?c thay đ?i đ? phù h?p v?i d? li?u m?i (xem các tài s?n RefreshStyle đ? bi?t chi ti?t).
M? sau đây cho th?y làm th? nào đ? t? đ?ng hoá Excel 2000 ho?c năm 2002 đ? t?o ra m?t m?i QueryTable trong m?t b?ng tính Excel b?ng cách s? d?ng d? li?u t? b? máy cơ s? d? li?u m?u Northwind.
        '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
				

S? d?ng b?ng t?m

B?n có th? s? d?ng b?ng t?m đ? chuy?n d? li?u vào m?t b?ng tính. Đ? dán d? li?u vào các t? bào nhi?u trên m?t b?ng tính, b?n có th? sao chép m?t chu?i trong đó c?t đư?c phân cách b?ng kí t? đ?i di?n tab, và hàng đư?c phân cách b?i v?n chuy?n biên l?i nhu?n. M? sau đây minh ho? cách Visual Basic.net s? d?ng b?ng t?m đ? chuy?n d? li?u sang 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()
				

T?o m?t t?p tin văn b?n delimited Excel có th? phân tích cú pháp thành các hàng và c?t

Excel có th? m? tab-phân cách t?p tin ho?c t?p tin phân cách b?ng d?u ki?m ph?y và phân tích m?t cách chính xác các d? li?u vào các t? bào. B?n có th? s? d?ng tính năng này khi b?n mu?n chuy?n r?t nhi?u d? li?u vào m?t b?ng tính trong khi s? d?ng ít, n?u có, t? đ?ng hóa. Đi?u này có th? là m?t cách ti?p c?n t?t cho m?t chương tr?nh khách hàng máy ch?, b?i v? các t?p tin văn b?n có th? là t?o ra phía máy ch?. Sau đó, b?n có th? m? các t?p tin văn b?n t?i các khách hàng, s? d?ng t? đ?ng hóa, nơi mà nó là thích h?p.

M? sau đây minh h?a làm th? nào đ? t?o ra m?t tab-delimited text file t? d? li?u đư?c đ?c v?i 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()
				
Không có t? đ?ng hóa đư?c s? d?ng trong m? trư?c đó. Tuy nhiên, b?n có th? s? d?ng t?i thi?u t? đ?ng m? t?p tin văn b?n và lưu các t?p tin trong các đ?nh d?ng b?ng tính Excel, như sau.
        '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()
				

Chuy?n d? li?u đ?n m?t b?ng tính b?ng cách s? d?ng ADO.NET

B?n có th? s? d?ng Microsoft ph?n l?c OLE DB nhà cung c?p đ? thêm h? sơ vào m?t b?ng trong m?t b?ng tính Excel s?n có. M?t b?ng"" trong Excel là ch? đơn thu?n là m?t lo?t các t? bào; ph?m vi có th? có m?t tên đư?c xác đ?nh. Thông thư?ng, d?ng đ?u tiên c?a d?y ch?a các tiêu đ? (ho?c l?nh v?c tên), và t?t c? các hàng sau này trong ph?m vi có ch?a các h? sơ.

M? sau đây cho bi?t thêm hai b?n ghi m?i vào m?t b?ng trong Book7.xls. B?ng trong trư?ng h?p này là 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()
				
Khi b?n thêm b?n ghi v?i ADO.NET như hi?n th?, đ?nh d?ng trong b?ng tính đư?c duy tr?. M?i b?n ghi s? đư?c thêm vào m?t hàng vay mư?n các đ?nh d?ng t? d?ng trư?c khi nó. Ví d?, l?nh v?c m?i đư?c thêm vào c?t B đư?c đ?nh d?ng v?i s? liên k?t thích h?p v? di đ?ng B1 là quy?n liên k?t.

Lưu ? r?ng khi m?t k? l?c đư?c đưa vào m?t t? bào ho?c các t? bào trong b?ng tính, nó ghi đè b?t k? d? li?u nào các t? bào trư?c đó ch?a. Nói cách khác, các hàng trong b?ng tính đư?c không "đ?y xu?ng" khi k? l?c m?i đư?c thêm vào. Ghi nh? đi?u này khi b?n thi?t k? giao di?n c?a d? li?u vào b?ng tính c?a b?n n?u b?n có k? ho?ch đ? chèn các b?n ghi m?i b?ng cách s? d?ng ADO.NET.

Đ? bi?t thêm chi ti?t v? làm th? nào đ? s? d?ng ADO.NET, nh?p vào s? bài vi?t sau đ? xem các bài vi?t trong cơ s? ki?n th?c Microsoft:
301075 Làm th? nào đ? k?t n?i v?i b? máy cơ s? d? li?u b?t lên và ch?y m?t l?nh b?ng cách s? d?ng ADO.NET và Visual Basic.net
301216 Làm th? nào đ? cư m?t b? d? li?u đ?i tư?ng t? m?t b? máy cơ s? d? li?u b?ng cách s? d?ng Visual Basic.net
301248 Làm th? nào đ? c?p nh?t b? máy cơ s? d? li?u t? m?t đ?i tư?ng b? d? li?u b?ng cách s? d?ng Visual Basic.net
Đ? bi?t thêm chi ti?t v? làm th? nào đ? s? d?ng máy bay ph?n l?c OLE DB nhà cung c?p v?i ngu?n d? li?u Excel, b?m s? bài vi?t sau đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
278973 ExcelADO ch?ng t? làm th? nào đ? s? d?ng ADO đ? đ?c và ghi d? li?u trong b?ng tính Excel
257819 Làm th? nào đ? s? d?ng ADO v?i d? li?u Excel t? Visual Basic ho?c VBA

Chuy?n d? li?u XML (Excel 2002 ch?)

Excel 2002 có th? m? b?t k? t?p tin XML là t?t đư?c h?nh thành. T?p XML có th? đư?c m? tr?c ti?p t? l?nh m? trên t?p tr?nh đơn, ho?c l?p tr?nh b?ng cách s? d?ng phương pháp ho?c m? ho?c OpenXML c?a b? sưu t?p sách bài t?p . N?u b?n t?o t?p tin XML đ? s? d?ng trong Excel, b?n c?ng có th? t?o ra phong cách trang đ? d?ng th?c d? li?u.

Đ? bi?t thêm chi ti?t v? làm th? nào đ? s? d?ng XML v?i Excel 2002, nh?p vào s? bài vi?t sau đ? xem các bài vi?t trong cơ s? ki?n th?c Microsoft:
307021 Làm th? nào đ? chuy?n d? li?u XML sang Microsoft Excel 2002 b?ng cách s? d?ng Visual Basic.net
288215 Microsoft Excel 2002 và XML

T?o Visual Basic.net d? án hoàn thành m?u

  1. T?o m?t m?c tin thư thoại đ? gi? s? làm vi?c Excel thesample đó s? t?o ra cho b?n, và sau đó, tên m?c tin thư thoại C:\Exceldata\.
  2. Th?c hi?n theo các bư?c sau đ? t?o m?t b?ng tính m?i cho sampleto đ? vi?t:
    1. B?t đ?u m?t b?ng tính m?i trong Excel.
    2. Trên Sheet1 c?a b?ng tính m?i, nh?p FirstName trong cell A1 và LastName trong t? bào A2.
    3. Lưu b?ng tính như C:\Exceldata\Book7.xls.
  3. B?t đ?u Visual Studio net. Trên menu t?p , b?m vào t?o m?i và sau đó nh?p vào d? án. Trong Visual Basic d? án, ch?n ?ng d?ng Windows. theo m?c đ?nh, Form1 t?o ra.
  4. Thêm m?t tham chi?u đ?n thư vi?n đ?i tư?ng, thư vi?n s? v?t Excel. Đ? làm đi?u này, h?y làm theo các bư?c sau:
    1. Trên các d? án tr?nh đơn, nh?p vào Thêm tài li?u tham kh?o.
    2. Trên COM tab, xác đ?nh v? trí thư vi?n đ?i tư?ng, thư vi?n s? v?t 10,0 Microsoft Excel, và sau đó nh?p vào ch?n.

      Lưu ? N?u b?n không làm như v?y, Microsoft khuy?n cáo r?ng b?n t?i v? và sau đó cài đ?t chuyên bi?t Microsoft văn ph?ng XP chính Interop h?i (PIAs). Đ? bi?t thêm chi ti?t v? văn ph?ng XP PIAs, nh?p vào s? bài vi?t sau đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
      328912 Microsoft văn ph?ng XP chính interop h?i đ?ng (PIAs) có s?n đ? t?i v?
    3. Trên COM tab, t?m Microsoft Đ?i tư?ng D? li?u ActiveX 2,7 thư vi?n, và sau đó nh?p vào ch?n.
    4. Nh?p vào OK trong hộp thoại Thêm tài li?u tham kh?o đ? ch?p nh?n l?a ch?n c?a b?n. N?u b?n nh?n đư?c m?t d?u ki?m nh?c đ? t?o ra hàm bao cho các thư vi?n mà b?n đ? ch?n, b?m vào .
  5. Thêm m?t đi?u khi?n h?p t? h?p và m?t nút ch?n m?t ki?m soát đ? Form1.
  6. Thêm m? sau vào 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
    					
    Lưu ? N?u b?n không cài đ?t chuyên bi?t văn ph?ng vào thư mục mặc định (C:\ProgramFiles\Microsoft văn ph?ng), thay đ?i liên t?c sNorthwind trong m?u m? đ? phù h?p v?i forNorthwind.mdb c?a b?n đư?ng d?n cài đ?t chuyên bi?t.

  7. Thêm m? sau vào đ?u c?a Form1.vb.
    Imports Microsoft.Office.Interop
    					
  8. Nh?n F5 đ? xây d?ng và sau đó ch?y m?u.

Tham kh?o

Đ? bi?t thêm chi ti?t, ghé thăm Web site sau c?a Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/en-US/Library/aa188489 (office.10).aspx
Đ? bi?t thêm chi ti?t, nh?p vào s? bài vi?t sau đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
247412 Các phương pháp đ? chuy?n d? li?u sang Excel t? Visual Basic

Thu?c tính

ID c?a bài: 306022 - L?n xem xét sau cùng: 09 Tháng Hai 2014 - Xem xét l?i: 3.0
Áp d?ng
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
T? khóa: 
kbautomation kbhowtomaster kbmt KB306022 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 thu?t của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa l?i thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung c?p các bài vi?t đư?c c? biên d?ch viên và ph?n m?m d?ch thu?t th?c hi?n và c?ng đ?ng ch?nh s?a l?i đ? 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 nhi?u ngôn ng? Tuy nhiên, bài vi?t do máy d?ch hoặc thậm chí cộng đồng chỉnh sửa sau không ph?i lúc nào c?ng hoàn h?o. Các 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, 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.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này: 306022

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