Comment faire pour transférer des données vers un classeur Excel à l’aide de Visual Basic .NET

Pour obtenir une version Microsoft Visual C# .NET de cet article, reportez-vous à la section 306023 .

Résumé

Cet article décrit plusieurs méthodes pour transférer des données vers Excel 2002 à partir d’un programme Visual Basic .NET. Cet article présente également les avantages et les inconvénients de chaque méthode afin que vous puissiez sélectionner la solution qui convient le mieux à votre situation.

Vue d’ensemble

La technique la plus fréquemment utilisée pour transférer des données vers un classeur Excel est Automation. Avec Automation, vous pouvez appeler les méthodes et propriétés qui sont spécifiques aux tâches Excel. Automation vous offre une flexibilité optimale pour spécifier l’emplacement de vos données dans le classeur et la possibilité de mettre en forme le classeur et effectuer différents paramétrages au moment de l’exécution.

Avec Automation, vous pouvez utiliser plusieurs techniques pour transférer vos données :
  • Transférer les données cellule par cellule.
  • Transférer des données dans un tableau à une plage de cellules.
  • Permet de transférer des données dans un jeu d’enregistrements ADO vers une plage de cellules à l’aide de la méthode CopyFromRecordset .
  • Créer un objet QueryTable sur une feuille de calcul Excel qui contient le résultat d’une requête sur une source de données ODBC ou OLEDB.
  • Transférer des données vers le Presse-papiers, puis coller le contenu du Presse-papiers dans une feuille de calcul Excel.
Vous pouvez également utiliser plusieurs méthodes qui ne nécessitent pas forcément l’Automation transférer des données vers Excel. Si vous exécutez un programme côté serveur, cela peut être une bonne approche pour la plus grande partie du traitement des données à partir de vos clients.

Les approches suivantes peuvent être utilisées pour transférer vos données sans Automation :
  • Transférer vos données dans un fichier texte délimité par des tabulations ou des virgules qu’Excel peut analyser ultérieurement dans des cellules dans une feuille de calcul.
  • Transférer vos données vers une feuille de calcul à l’aide de ADO.NET.
  • Transférer des données XML dans Excel (version 2002 uniquement) pour fournir des données qui sont mis en forme et organisées en lignes et colonnes.

Techniques

Utiliser Automation pour transférer les données cellule par cellule

Avec Automation, vous pouvez transférer des données vers une cellule d’une feuille de calcul à la fois, comme suit.
        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()

Transfert de données cellule par cellule peut être une approche acceptable si il n’existe pas de quantité de données à transférer. Vous avez la possibilité de placer des données de n’importe où dans le classeur et que vous pouvez mettre en forme les cellules sous certaines conditions au moment de l’exécution. Toutefois, cette approche n’est pas recommandée si vous avez un grand nombre de données à transférer vers un classeur Excel. Chaque objet Range que vous obtenez au moment de l’exécution entraîne une demande d’interface. Par conséquent, le transfert de données de cette manière peut être lente.
En outre, Microsoft Windows 95, Microsoft Windows 98 et Microsoft Windows Millennium Edition (Me) ont une limite de 64 Ko sur les demandes d’interface. Si vous disposez de 64 Ko ou plus de demandes d’interface, le serveur Automation (Excel) peut cesser de répondre ou vous pouvez recevoir des messages d’erreur indiquant une mémoire insuffisante.
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

216400 interprocessus COM Automation peut bloquer l’application cliente sous Win95/98

À nouveau, le transfert de données cellule par cellule est acceptable uniquement pour petites quantités de données. Si vous devez transférer de gros volumes de données vers Excel, envisagez d’utiliser une des autres approches décrites dans cet article pour transférer des données en bloc.

Pour plus d’informations et pour obtenir un exemple de comment faire pour automatiser Excel avec Visual Basic .NET, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

301982 comment automatiser Microsoft Excel à partir de Visual Basic .NET

Utiliser Automation pour transférer un tableau de données à une plage dans une feuille de calcul

Un tableau de données peut être transféré à une plage de plusieurs cellules en même temps, comme suit.
        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()

Si vous transférez des données à l’aide d’un tableau plutôt que cellule par cellule, vous pouvez réaliser un gain de performance avec un grand nombre de données. Prendre en compte cette ligne dans le code précédent, qui transfère les données vers 300 cellules de la feuille de calcul.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray
Cette ligne représente deux demandes d’interface : un pour l’objet Range qui la méthode Range renvoie et l’autre pour l’objet Range qui la méthode Resize . En revanche, transférer les données cellule par cellule nécessite des requêtes pour 300 interfaces avec les objets Range . Chaque fois que possible, vous pouvez bénéficier de transfert de vos données en bloc et de réduire le nombre de demandes d’interface que vous rendre.

Utiliser Automation pour transférer un jeu d’enregistrements ADO vers une plage de feuille de calcul

Les modèles objets pour Excel 2000 et Excel 2002 fournissent la méthode CopyFromRecordset pour transférer un jeu d’enregistrements ADO vers une plage sur une feuille de calcul. Le code suivant illustre comment faire pour automatiser Excel afin de transférer le contenu de la table Orders dans la base de données exemple Les Comptoirs à l’aide de la méthode 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()

Remarque : CopyFromRecordset fonctionne uniquement avec les objets ADO Recordset . Un groupe de données que vous créez à l’aide d’ADO.NET ne peut pas être utilisé avec la méthode CopyFromRecordset . Plusieurs exemples dans les sections qui suivent montrent comment transférer des données vers Excel avec ADO.NET.

Utiliser Automation pour créer un objet QueryTable sur une feuille de calcul

Un objet QueryTable représente un tableau qui est généré à partir des données retournées à partir d’une source de données externe. Lorsque vous automatisez Excel, vous pouvez créer une table de requête en fournissant une chaîne de connexion pour un OLEDB ou une source de données ODBC et une chaîne SQL. Excel génère le jeu d’enregistrements et l’insère dans la feuille de calcul à l’emplacement que vous spécifiez. À l’aide d’objets QueryTable offre les avantages suivants par rapport à la méthode CopyFromRecordset :
  • Excel gère la création du jeu d’enregistrements et son positionnement dans la feuille de calcul.
  • La requête peut être enregistrée avec l’objet QueryTable afin qu’elle puisse être actualisée ultérieurement pour obtenir un jeu d’enregistrements mis à jour.
  • Lorsqu’une nouvelle table de requête est ajoutée à votre feuille de calcul, vous pouvez spécifier que les données qui existent déjà dans les cellules sur la feuille de calcul doivent être déplacées pour s’adapter à nouvelles données (consultez la propriété RefreshStyle pour plus de détails).
Le code suivant illustre comment faire pour automatiser Excel 2000 ou 2002 pour créer une nouvelle table de requête dans une feuille de calcul Excel à l’aide de données à partir de la base de données exemple Les Comptoirs.
        '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

Utiliser le Presse-papiers

Vous pouvez utiliser le Presse-papiers pour transférer des données vers une feuille de calcul. Pour coller des données dans plusieurs cellules d’une feuille de calcul, vous pouvez copier une chaîne dans laquelle les colonnes sont délimitées par des tabulations, et les lignes par des retours chariot. Le code suivant illustre la façon dont Visual Basic .NET utilise le Presse-papiers pour transférer des données vers 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()

Créez un fichier texte délimité qu’Excel peut analyser en lignes et colonnes

Excel peut ouvrir des fichiers de tabulations ou délimité par des virgules et analyser correctement les données dans les cellules. Vous pouvez utiliser cette fonction lorsque vous voulez transférer une grande quantité de données à une feuille de calcul en utilisant très peu, le cas échéant, d’Automation. Cela peut être une bonne approche pour un programme client-serveur, car le fichier texte peut être généré côté serveur. Vous pouvez ensuite ouvrir le fichier texte au niveau du client, à l’aide de Automation le cas échéant.

Le code suivant illustre comment générer un fichier texte délimité à partir de données lues avec 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()

Aucune Automation n’a été utilisée dans le code précédent. Toutefois, vous pouvez utiliser Automation minimale pour ouvrir le fichier texte et enregistrez-le au format classeur Excel, comme suit.
        '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()

Transférer des données vers une feuille de calcul à l’aide de ADO.NET

Vous pouvez utiliser le fournisseur OLE DB Microsoft Jet pour ajouter des enregistrements à une table dans un classeur Excel existant. Une « table » dans Excel est simplement une plage de cellules ; la plage peut comporter un nom défini. En général, la première ligne de la plage contient les en-têtes (ou noms de champs), et toutes les lignes d’une version ultérieure de la plage contiennent les enregistrements.

Le code suivant ajoute deux nouveaux enregistrements à une table dans Book7.xls. Dans ce cas, la table est la feuille 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()

Lorsque vous ajoutez des enregistrements avec ADO.NET comme indiqué, la mise en forme dans le classeur est conservée. Chaque enregistrement qui est ajouté à une ligne emprunte le format de la ligne avant elle. Par exemple, les nouveaux champs sont ajoutés à la colonne B sont mis en forme avec un alignement à droite, car la cellule B1 est aligné à droite.

Notez que lorsqu’un enregistrement est ajouté à une cellule ou des cellules dans la feuille de calcul, il remplace toutes les données qui contenait auparavant de ces cellules. En d’autres termes, les lignes dans la feuille de calcul ne sont pas « enclenchées » lors de l’ajout de nouveaux enregistrements. Gardez à l’esprit lorsque vous concevez la présentation des données des feuilles de calcul si vous envisagez de l’insertion de nouveaux enregistrements à l’aide de ADO.NET.

Pour plus d’informations sur l’utilisation de ADO.NET, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :

301075 comment se connecter à une base de données et exécuter une commande à l’aide d’ADO.NET et de Visual Basic .NET

301216 comment remplir un objet DataSet à partir d’une base de données à l’aide de Visual Basic .NET

301248 comment mettre à jour une base de données à partir d’un objet DataSet à l’aide de Visual Basic .NET

Pour plus d’informations sur la façon d’utiliser le fournisseur OLE DB Jet avec des sources de données Excel, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

278973 ExcelADO montre comment utiliser ADO pour lire et écrire des données dans des classeurs Excel

257819 comment utiliser ADO avec des données Excel à partir de Visual Basic ou de VBA

Transfert de données XML (Excel 2002 uniquement)

Excel 2002 peut ouvrir n’importe quel fichier XML bien formé. Les fichiers XML peuvent être ouverts directement à partir de la commande Ouvrir dans le menu fichier , ou par programme à l’aide des méthodes Open ou OpenXML de la collection Workbooks . Si vous créez des fichiers XML pour les utiliser dans Excel, vous pouvez également créer des feuilles de style pour mettre en forme les données.

Pour plus d’informations sur l’utilisation de XML avec Excel 2002, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :

307021 comment transférer des données XML vers Microsoft Excel 2002 à l’aide de Visual Basic .NET

Microsoft Excel 2002 et XML de 288215

Créer le projet Visual Basic .NET complète

  1. Créer un nouveau dossier pour y stocker les classeurs Excel que l’exemple crée pour vous et puis nommez le dossier C:\Exceldata\.
  2. Suivez ces étapes pour créer un nouveau classeur pour l’exemple d’écrire à :
    1. Démarrez un nouveau classeur dans Excel.
    2. Dans la feuille Sheet1 du nouveau classeur, tapez
      Prénom dans la cellule A1 et LastName dans la cellule A2.
    3. Enregistrez le classeur en tant que C:\Exceldata\Book7.xls.
  3. Démarrez Visual Studio .NET. Dans le menu fichier , cliquez sur Nouveau , puis cliquez sur projet. Dans Les projets Visual Basic, sélectionnez Application Windows. Par défaut, Form1 est créé.
  4. Ajoutez une référence à la bibliothèque d’objets Excel. Pour ce faire, procédez comme suit :
    1. Dans le menu projet, cliquez sur Ajouter une référence.
    2. Sous l’onglet COM , recherchez Microsoft Excel 10.0 Object Library, puis cliquez sur Sélectionner.

      Remarque Si vous ne le n'avez pas déjà fait, Microsoft vous recommande de télécharger et d’installer le Microsoft Office XP Primary Interop Assemblies (PIA).
      Pour plus d’informations sur les assemblys PIA Office XP, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

      328912 Microsoft Office XP assemblys PIA (Primary Interop Assemblies) sont disponibles pour téléchargement

    3. Sous l’onglet COM , recherchez Microsoft ActiveX Data Objects 2.7 Library, puis cliquez sur Sélectionner.
    4. Cliquez sur OK dans la boîte de dialogue Ajouter une référence pour accepter vos sélections. Si vous recevez une invite pour générer des wrappers pour les bibliothèques que vous avez sélectionné, cliquez sur Oui.
  5. Ajoutez un contrôle de Zone de liste déroulante et un contrôle de bouton à Form1.
  6. Ajoutez le code suivant à 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

    Remarque Si vous n’avez pas installé Office dans le dossier par défaut (C:\Program Files\Microsoft Office), modifiez la constante sNorthwind dans l’exemple de code correspondant à votre chemin d’installation de Comptoir.mdb.

  7. Au début de Form1.vb, ajoutez le code suivant.
    Imports Microsoft.Office.Interop
  8. Appuyez sur F5 pour générer et exécuter l’exemple.

Références

Pour plus d’informations, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

Méthodes 247412 pour transférer des données vers Excel à partir de Visual Basic

Propriétés

ID d'article : 306022 - Dernière mise à jour : 9 janv. 2017 - Révision : 1

Commentaires