Jak přenést data do sešitu aplikace Excel pomocí jazyka Visual Basic .NET

Microsoft Visual C# .NET verzi tohoto článku naleznete v tématu 306023 .

Souhrn

Tento podrobný článek popisuje několik metod pro přenos dat do aplikace Excel 2002 z programu Visual Basic .NET. Tento článek také uvádí výhody a nevýhody jednotlivých metod tak, aby bylo možné vybrat řešení, které je nejvhodnější pro vaši situaci.

Přehled

Technika, která se nejčastěji používá k přenosu dat do sešitu aplikace Excel je automatizace. S automatizaci můžete volat metody a vlastnosti, které jsou specifické pro úlohy v aplikaci Excel. Automatizace poskytuje největší flexibilitu pro určení umístění dat v sešitu a možnost formátování sešitu a různých nastavení v době běhu.

S automatizací můžete použít několik postupů pro přenos dat:
  • Přenos dat buňku po buňce.
  • Přenos dat v matici do oblasti buněk.
  • Převod dat v objektu ADO recordset do oblasti buněk pomocí metody CopyFromRecordset .
  • Vytvoření objektu tabulky dotazu na listu aplikace Excel, která obsahuje výsledek dotazu na zdroj dat ODBC nebo OLEDB.
  • Přenos dat do schránky a vložte obsah schránky do listu aplikace Excel.
Můžete také použít několik metod, které nevyžadují nutně automatizace k přenosu dat do aplikace Excel. Pokud používáte serverový program, může to být dobrým přístupem pro přijetí hromadného zpracování dat od klientů.

K přenosu dat bez automatizace lze postupovat takto:
  • Přeneste data na kartu nebo čárkami oddělený textový soubor, který lze později analyzovat Excel do buňky v listu.
  • Převod dat do listu pomocí technologie ADO.NET.
  • Převod dat XML do aplikace Excel (pouze verze 2002) poskytují data, která jsou formátována a uspořádány do řádků a sloupců.

Techniky

Přenos dat buňku po buňce použít automatizaci

Automatizace umožňuje převést data do jedné buňky listu najednou, takto.
        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()

Přenos dat buňku po buňce může být přijatelný přístup, pokud není k dispozici množství dat k přenosu. Máte možnost data umístit kdekoli v sešitu a můžete formátovat buňky podmíněně za běhu. Tento postup se však nedoporučuje, pokud máte velké množství dat k přenosu do sešitu aplikace Excel. Každý rozsah objektu můžete získat v době běhu výsledky v požadavku rozhraní. Přenos dat tímto způsobem proto může být pomalé.
Navíc Microsoft Windows 95, Microsoft Windows 98 a Microsoft Windows Millennium Edition (ME) mají omezení 64 KB na rozhraní žádosti. Pokud máte 64 KB nebo více požadavků na rozhraní, Automation server (Excel) může přestat reagovat nebo mohou zobrazit chybové zprávy, které označují nedostatek paměti.
Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

216400 napříč procesy automatizace modelu COM může zavěsit klientská aplikace na Win95/98

Přenos dat buňku po buňce je opět pouze pro malé množství dat. Pokud velkých sad dat nutné přenést do aplikace Excel, můžete použít jeden z přístupů, které jsou zmíněny v tomto článku k přenosu dat hromadně.

Další informace a příklad automatizace aplikace Excel pomocí jazyka Visual Basic .NET klepněte na následující číslo článku databáze Microsoft Knowledge Base:

301982 jak automatizovat aplikaci Microsoft Excel z Visual Basic .NET

Pomocí automatizace přenést rozsah pole data v listu

Pole dat lze převést na oblast buněk více současně, takto.
        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()

Přenos dat pomocí pole namísto buňku po buňce, může realizovat zisk ohromný výkon s velkým množstvím dat. Zvažte tento řádek ze starší kód, který převede data do 300 buněk v listu.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray
Tento řádek představuje dva požadavky rozhraní: jeden pro oblast objektu, který vrací metoda rozsah a druhou pro oblast objektu, který vrací metoda změnit velikost . Naopak přenos dat buňku po buňce vyžaduje požadavky pro 300 rozhraní pro objekt rozsah . Kdykoli je to možné, můžete těžit z přenosu dat hromadně a snížení počtu požadavků rozhraní provedete.

Pomocí automatizace přenést sada záznamů ADO oblast listu

Objektových modelů aplikace Excel 2000 a Excel 2002 poskytují CopyFromRecordset metoda pro převod objektu ADO recordset do oblasti na listu. Následující kód ukazuje, jak automatizovat Excel pomocí metody CopyFromRecordset přenést obsah tabulky objednávky v ukázkové databázi Northwind.
        '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()

Poznámka: CopyFromRecordset pracuje pouze s objekty ADO Recordset . Pomocí metody CopyFromRecordset nelze použít sady dat můžete vytvořit pomocí technologie ADO.NET. Několik příkladů v následujících částech ukazují, jak k přenosu dat do aplikace Excel pomocí technologie ADO.NET.

Vytvoření objektu tabulky dotazu na listu použít automatizace

Objektu představuje tabulku, která je vytvořena na základě dat vrácených z externího zdroje dat. Při automatizaci aplikace Excel můžete vytvořit tabulky dotazu poskytnutím řetězec připojení OLEDB nebo zdroj dat ODBC a SQL řetězec. Aplikace Excel vytvoří sadu záznamů a vloží do listu v umístění, které zadáte sadě záznamů. Pomocí tabulky dotazu objektů nabízí následující výhody nad CopyFromRecordset metoda:
  • Aplikace Excel zpracovává vytvoření sady záznamů a jeho umístění na listu.
  • Dotaz lze uložit pomocí objektu tak, že může být aktualizován později získat aktualizovanou sadu záznamů.
  • Při nové tabulky dotazu je přidán do listu, můžete určit, že data již existují v buňkách na listu posunuty přizpůsobit nová data (viz vlastnost RefreshStyle podrobnosti).
Následující kód ukazuje, jak automatizovat aplikaci Excel 2000 nebo 2002, chcete-li vytvořit nové tabulky dotazu na listu aplikace Excel pomocí dat z ukázkové databáze 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

Pomocí schránky

Do schránky můžete použít k přenosu dat do listu. Chcete-li vložit data do více buněk na listu, můžete zkopírovat řetězec, ve kterém jsou sloupce odděleny znaky tabulátoru a řádky jsou odděleny konce. Následující kód ilustruje, jak aplikace Visual Basic .NET používá k přenosu dat do aplikace Excel do schránky.
        '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()

Vytvoření textového souboru s oddělovači, můžete analyzovat Excel do řádků a sloupců

Aplikaci Excel můžete otevřít soubory oddělený tabulátory nebo čárkami a správně analyzovat data do buňky. Když chcete přenést velké množství dat na listu při použití automatizace málo, můžete tuto funkci. To může být dobrým přístupem aplikace klient server, protože textový soubor může být generované straně serveru. Potom můžete otevřít textový soubor na straně klienta pomocí automatizace, kde je to vhodné.

Následující kód ukazuje, jak vygenerovat soubor text oddělený tabulátory z dat, která je číst pomocí technologie 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()

V předchozím kódu byla použita žádná automatizace. Však můžete použít minimální automatizace otevřete textový soubor a uložte soubor ve formátu sešitu aplikace Excel následujícím způsobem.
        '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()

Přenos dat do listu pomocí ADO.NET

Chcete-li přidat záznamy do tabulky v existující sešit aplikace Excel, můžete použít zprostředkovatele Microsoft Jet OLE DB. "Tabulka" v aplikaci Excel je pouze oblast buněk; oblast může obsahovat definovaný název. Obvykle obsahuje první řádek oblasti záhlaví (nebo názvy polí) a všechny novější řádky v oblasti obsahují záznamy.

Následující kód přidá dva nové záznamy do tabulky v Book7.xls. Tabulka je v tomto případě List1.
       '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()

Když přidáte záznamy s ADO.NET, jak je znázorněno, bylo zachováno formátování v sešitu. Každý záznam, který je přidán do řádku vypůjčí formát z řádku před ním. Například nová pole, která jsou přidána do sloupce B jsou formátovány se zarovnáním vpravo, protože buňky B1 je zarovnána doprava.

Všimněte si, že při přidání záznamu na buňku nebo buňky v listu přepíše všechna data, která tyto buňky dříve obsažena. Jinými slovy řádky v listu nejsou "stlačí" při přidávání nových záznamů. Mějte na paměti při navrhování rozložení dat listy Pokud chcete vložit nové záznamy pomocí technologie ADO.NET.

Další informace o použití ADO.NET klepnutím na následující čísla článku zobrazení v článcích znalostní báze Microsoft Knowledge Base:

301075 jak připojit k databázi a příkaz spustit pomocí ADO.NET a Visual Basic .NET

301216 jak naplnit objekt DataSet z databáze pomocí Visual Basic .NET

301248 jak aktualizovat databázi z objektu DataSet pomocí jazyka Visual Basic .NET

Další informace o použití zprostředkovatele Jet OLE DB pomocí zdroje dat aplikace Excel klepněte na následující číslo článku databáze Microsoft Knowledge Base:

278973 Součást ExcelADO ukazuje způsob použití objektu ADO ke čtení a zápisu dat v sešitech aplikace Excel

257819 způsob použití objektu ADO s daty aplikace Excel z aplikace Visual Basic nebo VBA

Převod dat XML (pouze v aplikaci Excel 2002)

Aplikaci Excel 2002 můžete otevřít libovolný soubor XML, který je ve správném formátu. Soubory XML lze otevřít přímo z příkazu Otevřít v nabídce soubor nebo programově pomocí metody kolekce sešity otevřené nebo OpenXML . Pokud vytvoříte soubory XML pro použití v aplikaci Excel, můžete také vytvořit šablony stylů formátování data.

Další informace o použití jazyka XML v aplikaci Excel 2002 získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

307021 jak přenést XML data do aplikace Microsoft Excel 2002 pomocí Visual Basic .NET

288215 aplikace Microsoft Excel 2002 a XML

Vytvoření projektu Visual Basic .NET celý vzorek

  1. Vytvořte novou složku pro uložení sešitů aplikace Excel, že vzorek můžete vytvořit a potom zadejte název složky C:\Exceldata\.
  2. Postupujte takto Chcete-li vytvořit nový sešit pro vzorek k zápisu:
    1. Spusťte nový sešit v aplikaci Excel.
    2. Na List1 nový sešit zadejte
      FirstName v buňce A1 a Příjmení v buňce A2.
    3. Sešit uložte jako C:\Exceldata\Book7.xls.
  3. Spusťte aplikaci Visual Studio .NET. V nabídce soubor klepněte na příkaz Nový a klepněte na příkaz projekt. Ve skupinovém rámečku Projekty jazyka Visual Basicvyberte Aplikace Windows. Ve výchozím nastavení je vytvořen formulář Form1.
  4. Přidáte odkaz na Knihovna objektů aplikace Excel. Chcete-li to provést, postupujte takto:
    1. V nabídce projekt klepněte na tlačítko Přidat odkaz.
    2. Na kartě COM vyhledejte Microsoft Excel 10.0 Object Librarya klepněte na tlačítko Vybrat.

      Poznámka: Pokud jste tak již neučinili, doporučuje společnost Microsoft stáhnout a pak nainstalovat Microsoft Office XP primární definiční sestavení (PIA).
      Další informace o sestaveních PIA sady Office XP klepněte na následující číslo článku databáze Microsoft Knowledge Base:

      328912 Microsoft Office XP primární sestavení interop (PIA) jsou k dispozici ke stažení

    3. Na kartě COM vyhledejte Microsoft ActiveX Data objekty 2.7 Librarya klepněte na tlačítko Vybrat.
    4. Klepněte na tlačítko OK v dialogovém okně Přidat odkazy potvrďte výběr. Pokud se zobrazí výzva ke generování obálky pro vybrané knihovny, klepněte na tlačítko Ano.
  5. Přidáte ovládací prvek Pole se seznamem a ovládací prvek tlačítko do formuláře Form1.
  6. Následující kód přidejte do formuláře 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

    Poznámka: Pokud jste nenainstalovali Office do výchozí složky (C:\Program Files\Microsoft Office), změňte konstanta sNorthwind v ukázce kódu odpovídají instalační cestu k databázi Northwind.mdb.

  7. Přidejte následující kód k horní Form1.vb.
    Imports Microsoft.Office.Interop
  8. Stisknutím klávesy F5 vytvořte a spusťte vzorku.

Odkazy

Další informace naleznete následujícím webu Microsoft Developer Network (MSDN):Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

247412 metody přenosu dat do aplikace Excel z aplikace Visual Basic

Vlastnosti

ID článku: 306022 - Poslední kontrola: 20. 1. 2017 - Revize: 2

Váš názor