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

Traductions disponibles Traductions disponibles
Numéro d'article: 306022 - Voir les produits auxquels s'applique cet article
Pour une version de Visual C# .NET de cet article, voir 306023.
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article étape par étape décrit plusieurs méthodes pour transférer des données vers Excel 2002 d'un programme Visual Basic .NET. Cet article présente également les avantages et inconvénients de chaque méthode afin que vous pouvez sélectionner la solution mieux adaptée à votre situation.

Vue d'ensemble

La technique qui sert souvent à transférer des données vers un classeur Excel est Automation . Avec Automation, vous pouvez appeler méthodes et propriétés qui sont spécifiques aux tâches d'Excel. Automation vous offre la plus grande souplesse pour spécifier l'emplacement de vos données dans le classeur et la possibilité de mettre en forme le classeur et d'effectuer divers paramètres au moment de l'exécution.

Avec Automation, vous pouvez utiliser plusieurs techniques pour transférer vos données :
  • Transférer des données cellule par cellule.
  • Transférer des données d'un tableau à une plage de cellules.
  • Transférer les données d'un jeu d'enregistrements ADO à une plage de cellules à l'aide de la méthode CopyFromRecordset .
  • Créez 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 puis collez le contenu du Presse-papiers dans une feuille de calcul Excel.
Vous pouvez également utiliser plusieurs méthodes qui ne nécessitent pas nécessairement Automation transférer des données vers Excel. Si vous exécutez un programme côté serveur, ceci peut être une bonne approche pour prendre l'essentiel du traitement des données à partir de vos clients.

Les approches suivantes peuvent être utilisés pour transférer vos données sans Automation :
  • Transférer vos données vers un fichier texte délimité par des tabulations ou virgules-des qu'Excel peut analyser ultérieurement dans des cellules dans une feuille de calcul.
  • Transférer vos données dans une feuille de calcul à l'aide d'ADO.NET.
  • Transférer des données XML vers 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 les données à 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 des données cellule par cellule peut être une approche acceptable si il n'est pas quantité de données à transférer. Vous avez la possibilité de placer des données n'importe où dans le classeur et que vous pouvez mettre en forme les cellules de façon conditionnelle au moment de l'exécution. Toutefois, cette approche est recommandée pas si vous avez beaucoup de données pour transférer vers un Excel classeur. Chaque objet Range vous obtenir au moment de l'exécution entraîne une demande d'interface. Transfert des données de cette manière peut donc lente.
En outre, Microsoft Windows 95, Microsoft Windows 98 et Microsoft Windows Millennium Edition (Me) possèdent une limite de 64 Ko sur demandes d'interface. Si vous avez 64 Ko ou plus de demandes d'interface, le serveur Automation (Excel) peut cesser de répondre, ou messages d'erreur indiquant une mémoire insuffisante peuvent s'afficher. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
216400 Les processus COM Automation peut bloquer l'application cliente de Windows 95/98
Là encore, le transfert des données cellule par cellule est acceptable uniquement pour les petites quantités de données. Si vous devez transférer grands ensembles de données vers Excel, utilisez une des méthodes présentées dans cet article pour transférer des données en bloc.

Pour plus d'informations et pour obtenir un exemple illustrant comment 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 faire pour automatiser Microsoft Excel à partir de Visual Basic .NET

Utiliser Automation pour transférer un tableau de données vers 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 en utilisant un tableau au lieu de cellule par cellule, vous pouvez réalisez un gain de performances considérables avec une grande quantité de données. Pensez à cette ligne du code antérieur, qui transfère des 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 une autre pour l'objet Range qui la méthode Resize renvoie. En revanche, le transfert de données cellule par cellule nécessite demandes pour 300 interface aux objets Range . Dans la mesure du possible, vous pouvez tirer parti transférer vos données en bloc et réduisant le nombre de demandes d'interface que vous apporter.

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

Les modèles d'objet pour Excel 2000 et Excel 2002 fournit la méthode CopyFromRecordset pour transférer un jeu d'enregistrements ADO vers une plage dans une feuille de calcul. Le code suivant montre comment automatiser Excel pour transférer le contenu de la table Commandes 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 DataSet que vous créez à l'aide d'ADO.NET ne peut pas être utilisée 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 une table qui est générée à partir des données renvoyé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 à un OLEDB ou à une source de données ODBC et une chaîne SQL. Excel génère le jeu d'enregistrements et insère le jeu d'enregistrements dans la feuille de calcul à l'emplacement que vous spécifiez. À l'aide d'objets QueryTable offre les avantages suivants sur la méthode CopyFromRecordset :
  • Excel gère la création du jeu d'enregistrements et son sélection élective dans la feuille de calcul.
  • La requête peut être enregistrée avec l'objet QueryTable afin que peut être actualisée ultérieurement pour obtenir un jeu d'enregistrements mis à jour.
  • Lorsqu'une nouvelle table de requête est ajouté à votre feuille de calcul, vous pouvez spécifier que les données existantes dans les cellules de la feuille de calcul être déplacées pour tenir les nouvelles données (consultez la propriété RefreshStyle pour plus d'informations).
Le code suivant montre comment faire pour automatiser Excel 2000 ou 2002 pour créer une nouvelle table de requête dans une feuille de calcul Excel en utilisant des données 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 les données dans plusieurs cellules dans une feuille de calcul, vous pouvez copier une chaîne dans lequel les colonnes sont délimités par des tabulations et les lignes sont délimités par des retours chariot. Le code suivant montre comment 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éer un fichier texte délimité qu'Excel peut analyser en lignes et colonnes

Excel peut ouvrir des fichiers de délimité par des tabulations ou des fichiers délimitée par des virgules et analyser correctement les données dans les cellules. Vous pouvez utiliser cette fonctionnalité lorsque vous souhaitez transférer une grande quantité de données vers une feuille de calcul en utilisant Automation peu, le cas échéant. 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 sur le client, en utilisant Automation où il est approprié.

Le code suivant montre comment générer un fichier texte délimité par des tabulations de données qui sont lu 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 a été utilisée dans le code précédent. Toutefois, vous pouvez utiliser Automation minimale pour ouvrir le fichier texte et enregistrez-le dans Excel format de classeur, que 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 les données dans 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. Un « tableau » 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 champ) et toutes les lignes une version ultérieure de la plage contiennent les enregistrements.

Le code suivant ajoute deux nouveaux enregistrements à une table en Book7.xls. La table est dans ce cas 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 adapté langages le format de la ligne avant elle. Par exemple, nouveaux champs qui sont ajoutés à la colonne B sont mis en forme avec un alignement à droite car la cellule A1 est aligné à droite.

Notez que lorsqu'un enregistrement est ajouté à une ou plusieurs cellules dans la feuille de calcul, il remplace les données que ces cellules contenait auparavant. En d'autres termes, lignes de la feuille de calcul ne sont pas « envoyés vers le bas » lorsque de nouveaux enregistrements sont ajoutés. Gardez cela à l'esprit lorsque vous concevez la disposition des données dans vos feuilles de calcul si vous souhaitez les nouveaux enregistrements insérer à l'aide d'ADO.NET.

Pour plus d'informations sur la façon d'utiliser 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 de ADO.NET et Visual Basic .NET
301216 Comment faire pour 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 l'utilisation le fournisseur Jet OLE DB avec les 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

Transférer des données XML (Excel 2002 uniquement)

Excel 2002 peut ouvrir n'importe quel fichier XML qui est bien formé. Fichiers XML peuvent être ouverts directement depuis la commande Ouvrir dans le menu Fichier , ou par programmation en utilisant méthodes de l'ouvrir ou XML ouvert de la collection Workbooks . Si vous créez des fichiers XML à 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 dans 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
288215 Microsoft Excel 2002 et XML

Créer le projet Visual Basic .NET exemple complet

  1. Créer un nouveau dossier pour stocker les classeurs Excel que l'exemple est créer pour vous et puis nommez-le C:\Exceldata\.
  2. Suivez ces étapes pour créer un nouveau classeur pour l'exemple écrire dans :
    1. Démarrer un nouveau classeur dans Excel.
    2. Dans la feuille Sheet1 du nouveau classeur, tapez FirstName (prénom) dans la cellule A1 et le nom 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 Project . Sous projets Visual Basic , sélectionnez l'application de Windows . Par défaut, Form1 est créé.
  4. Ajouter une référence à la bibliothèque d'objet 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 , trouver la bibliothèque d'objets Microsoft Excel 10.0 , puis cliquez sur Sélectionner .

      note Si vous n'avez pas déjà fait, Microsoft vous recommande de vous téléchargez et de puis installer les assemblys Microsoft Office XP Primary Interop (assembly). 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 Assemblys interop primaires (assembly) Microsoft Office XP sont disponibles au téléchargement
    3. Sous l'onglet COM , Microsoft ActiveX Data Objects 2.7 bibliothèque , puis cliquez sur Sélectionner .
    4. Cliquer sur OK dans la boîte de dialogue Ajouter une référence pour accepter les 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 zone de liste déroulante et un contrôle de bouton à Form1.
  6. Add the following code to 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 installer Office dans le dossier par défaut (C:\Program Files\Microsoft Office), remplacez la constante sNorthwind dans l'exemple de code correspondant à votre chemin d'installation de Comptoir.mdb.

  7. Ajoutez le code suivant au début de Form1.vb.
    Imports Microsoft.Office.Interop
    					
  8. Appuyez sur F5 pour générer et ensuite exécuter l'exemple.

Références

Pour plus d'informations, visitez le développeur de Microsoft suivant site Web de Network (MSDN) :
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
247412 Méthodes pour transférer des données vers Excel à partir de Visual Basic

Propriétés

Numéro d'article: 306022 - Dernière mise à jour: mercredi 17 janvier 2007 - Version: 6.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Excel 2002
  • Microsoft Visual Basic .NET 2002 Initiation
  • Microsoft ADO.NET (included with the .NET Framework)
Mots-clés : 
kbmt kbautomation kbhowtomaster KB306022 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 306022
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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