Comment faire pour utiliser ADO.NET pour récupérer et modifier des enregistrements dans un classeur Excel avec Visual Basic .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 316934 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article explique comment vous pouvez utiliser ADO.NET pour récupérer des données à partir d'un classeur Microsoft Excel, modifier des données dans un classeur existant ou ajouter des données à un nouveau classeur. Pour accéder aux classeurs Excel avec ADO.NET, vous pouvez utiliser le fournisseur Jet OLE DB ; cet article fournit les informations dont vous avez besoin pour pouvoir utiliser le fournisseur Jet OLE DB lorsque Excel est la source de données cible.

Comment faire pour utiliser le fournisseur Jet OLE DB avec les classeurs Microsoft Excel

Le moteur de base de données Microsoft Jet peut accéder aux données dans d'autres formats de fichier de base de données, tels que les classeurs Excel, par le biais de pilotes ISAM (Indexed Sequential Access Method) installables. Pour ouvrir des formats externes pris en charge par le fournisseur OLE DB pour Microsoft Jet 4.0, vous spécifiez le type de base de données dans les propriétés étendues pour la connexion. Le fournisseur OLE DB pour Microsoft Jet prend en charge les types de base de données suivants pour les classeurs Microsoft Excel :
Excel 3.0
Excel 4.0
Excel 5.0
Excel 8.0
REMARQUE : utilisez le type de base de données source Excel 5.0 pour les classeurs Microsoft Excel 5.0 et 7.0 (95) et utilisez le type de base de données source Excel 8.0 pour les classeurs Microsoft Excel 8.0 (97), 9.0 (2000) et 10.0 (2002). Les exemples de cet article utilisent les classeurs Excel aux formats Excel 2000 et Excel 2002.

Chaîne de connexion

Pour accéder à un classeur Excel en utilisant le Fournisseur Jet OLE DB, utilisez une chaîne de connexion ayant la syntaxe suivante :
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties="Excel 8.0;HDR=YES;"
Dans la chaîne de connexion, spécifiez le chemin d'accès complet et le nom de fichier pour le classeur dans le paramètre Data Source. Le paramètre Extended Properties peut contenir deux propriétés : une propriété pour la version de méthode d'accès séquentiel indexé et une propriété pour indiquer si la/les table(s) inclue(nt) ou non des en-têtes.

Avec les classeurs Excel, la première ligne d'une plage est la ligne d'en-tête (ou noms de champs) par défaut. Si la première plage ne contient pas d'en-tête, vous pouvez spécifier HDR=NO dans les propriétés étendues de votre chaîne de connexion. Si vous spécifiez HDR=NO dans la chaîne de connexion, le fournisseur Jet OLE DB nomme automatiquement les champs pour vous (F1 représente le premier champ, F2 le deuxième, et ainsi de suite).

Types de données

À l'inverse d'une base de données traditionnelle, il n'existe aucune façon directe de spécifier les types de données pour les colonnes des tableaux Excel. Au lieu de cela, le fournisseur OLE DB analyse huit lignes d'une colonne pour deviner le type de données pour le champ. Vous pouvez changer le nombre de lignes à analyser en spécifiant une valeur entre un (1) et seize (16) pour le paramètre MAXSCANROWS dans les propriétés étendues de votre chaîne de connexion.

Conventions d'affectation des noms de tableaux

Il existe plusieurs façons de référencer un tableau (ou une plage) d'un classeur Excel :
  • Utilisez le nom de feuille suivi d'un symbole dollar (par exemple, [Sheet1$] ou [Ma Feuille de calcul$]). Un tableau de classeur qui est référencé de cette manière inclut la plage entière utilisée de la feuille de calcul.
    Select * from [Sheet1$]
  • Utilisez une plage avec un nom défini (par exemple, [MaPlageNommée]).
    Select * from [MaPlageNommée]
  • Utilisez une plage avec une adresse spécifique (par exemple, [Sheet1$A1:B10]) :
    Select * from [Sheet1$A1:B10]
REMARQUE : Le symbole dollar qui suit le nom de la feuille de calcul est une indication que la table existe. Si vous créez une table, comme mentionné dans la section Création de nouveaux classeurs et tables de cet article, n'utilisez pas le symbole dollar.

Comment faire pour utiliser des classeurs Excel comme sources de données ADO.NET

Récupérer des enregistrements

Vous pouvez récupérer des enregistrements à partir d'une base de données en utilisant l'une des deux approches dans ADO.NET : avec un Dataset ou avec un DataReader.

Un Dataset est un cache d'enregistrements récupéré à partir d'une source de données. Les données dans le Dataset sont habituellement une version très réduite de ce qui figure dans la base de données. Toutefois, vous pouvez travailler avec ces données de la même façon qu'avec les données réelles et rester déconnecté de la base de données réelle. Parallèlement à la récupération de données, vous pouvez également utiliser un Dataset pour exécuter des opérations de mise à jour sur la base de données sous-jacente.

Vous pouvez aussi utiliser un DataReader pour récupérer un flux de données avant en lecture seule à partir d'une base de données. Lorsque vous utilisez le programme DataReader, les performances augmentent et la charge du système diminue en raison du fait qu'il n'y a toujours qu'une seule ligne en mémoire. Si vous avez une grande quantité de données à récupérer et que vous ne comptez pas apporter des modifications à la base de données sous-jacente, il vaut mieux choisir un DataReader plutôt qu'un Dataset.

Ajouter et mettre à jour des enregistrements

Avec ADO.NET, vous pouvez insérer et mettre à jour des enregistrements dans un classeur selon une des trois méthodes suivantes :
  • Exécutez directement une commande pour insérer ou mettre à jour des enregistrements un par un. Pour cela, vous pouvez créer un objet OLEDbCommand sur votre connexion et définir sa propriété CommandText sur une commande valide pour insérer des enregistrements

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')
    ou une commande pour mettre à jour des enregistrements

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'
    puis appeler la méthode ExecuteNonQuery.
  • Apportez des modifications à un DataSet que vous avez rempli d'une table/requête à partir d'un classeur Excel puis appelez la méthode Update du DataAdapter pour résoudre les modifications du DataSet au classeur. Toutefois, pour utiliser la méthode Update pour la résolution de modification vous devez définir des commandes paramétrées pour le paramètre InsertCommand de DataAdapter
    INSERT INTO [Sheet1$] (F1, F2) values (?, ?)
    et UpdateCommand :
    UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?
    Les commandes INSERT et UPDATE paramétrées sont requises parce que OleDbDataAdapter ne fournit pas d'informations clé/d'index pour les classeurs Excel ; sans clé/champs d'indexation, CommandBuilder ne peut pas générer automatiquement les commandes pour vous.
  • Exportez des données d'une autre source de données dans un classeur Excel à condition que l'autre source de données puisse être utilisée avec le Fournisseur Jet OLE DB. Les sources de données que vous pouvez utiliser avec le Fournisseur Jet OLE DB de cette manière incluent des fichiers texte, des bases de données Microsoft Access, et, bien sûr, d'autres classeurs Excel. Avec une seule commande INSERT INTO, vous pouvez exporter des données d'une autre table/requête dans votre classeur :
    INSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"
    INSERT INTO requiert que la table cible (ou feuille de calcul) existe déjà ; les données sont ajoutées à la table cible.

    Vous pouvez utiliser également SELECT..INTO pour exporter votre table/requête vers un classeur :
    SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]
    Lorsque vous utilisez SELECT..INTO, si la table ou le classeur cible n'existe pas, il sera créé pour vous. Si la table existe déjà avant que la commande SELECT..INTO soit publiée, vous recevrez un message d'erreur.
La section Exemple de code dans la suite de cet article illustre chacune de ces approches pour ajouter et mettre à jour des enregistrements dans un classeur.

Supprimer des enregistrements

Bien que le Fournisseur Jet OLE DB vous permette d'insérer et de mettre à jour des enregistrements dans un classeur Excel, il n'autorise pas d'opérations DELETE. SI vous essayez d'effectuer une opération DELETE sur un ou plusieurs enregistrements, vous recevez le message d'erreur suivant :
La suppression de données dans une table attachée n'est pas gérée par le pilote ISAM.
Cette limitation est inhérente au traitement de classeurs Excel comme bases de données.

Créer des classeurs et des tables

Pour créer une table dans un classeur Excel, exécutez la commande TABLE CREATE :
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))
Lorsque vous exécutez cette commande, une nouvelle feuille de calcul est créée avec le nom de la table que vous spécifiez dans la commande. Si le classeur pour la connexion n'existe pas, il sera créé lui aussi.

La section Exemple de code montre comment vous pouvez utiliser la commande CREATE TABLE pour créer un nouveau classeur et une nouvelle table.

Étape par étape

Exemple de code

  1. Démarrez une application Windows Visual Basic .NET.

    Form1 est créé par défaut.
  2. Ajoutez six contrôles Radio Button et un contrôle Button à Form1.
  3. Sélectionnez tous les contrôles de type case d'option, puis définissez la propriété Size sur 200,24.
  4. Dans le menu Affichage, cliquez sur Code.
  5. Ajoutez la ligne suivante au tout début du module de code :
    Imports System.Data.OleDb
  6. Insérez le code suivant dans la classe Form :
    Private m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData1.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    
    Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData2.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    
    Private m_sNorthwind = _
          "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    
    Private m_sAction As String
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          RadioButton1.Text = "Create_Workbook"
          RadioButton2.Text = "Retrieve_Records"
          RadioButton3.Text = "Add_Records"
          RadioButton4.Text = "Update_Records"
          RadioButton5.Text = "Update_Individual_Cells"
          RadioButton6.Text = "Use_External_Source"
          Button1.Text = "Go!"
    End Sub
    
    Private Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
          Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _
          RadioButton4.Click, RadioButton5.Click, RadioButton6.Click
          m_sAction = sender.Text'Store the text for the selected radio button
    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          Try
             ' Call the associated routine to add/update/modify the workbook.
             Select Case m_sAction
                Case "Create_Workbook" : Create_Workbook()
                Case "Retrieve_Records" : Retrieve_Records()
                Case "Add_Records" : Add_Records()
                Case "Update_Records" : Update_Records()
                Case "Update_Individual_Cells" : Update_Individual_Cells()
                Case "Use_External_Source" : Use_External_Source()
             End Select
    
          Catch ex As OleDbException
             Dim er As OleDbError
             For Each er In ex.Errors
                MsgBox(er.Message)
             Next
          Catch ex2 As System.InvalidOperationException
             MsgBox(ex2.Message)
          End Try
    
    
    End Sub
    
    Public Sub Create_Workbook()
    
          ' If the workbooks already exist, prompt to delete.
          Dim answer As MsgBoxResult
          If Dir("C:\ExcelData1.xls") <> "" Or Dir("C:\ExcelData2.xls") <> "" Then
              answer = MsgBox("Delete existing workbooks (C:\ExcelData1.xls and " & _
                       "C:\ExcelData2.xls)?", MsgBoxStyle.YesNo)
              If answer = MsgBoxResult.Yes Then
                  If Dir("C:\ExcelData1.xls") <> "" Then Kill("C:\ExcelData1.xls")
                  If Dir("C:\ExcelData2.xls") <> "" Then Kill("C:\ExcelData2.xls")
              Else
                  Exit Sub
              End If
          End If
    
    '==========================================================================
          ' Create a workbook with a table named EmployeeData. The table has 3 
          ' fields: ID (char 255), Name (char 255) and Birthdate (date).  
    '==========================================================================
          Dim conn As New OleDbConnection()
          conn.ConnectionString = m_sConn1
          conn.Open()
          Dim cmd1 As New OleDbCommand()
          cmd1.Connection = conn
          cmd1.CommandText = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)"
          cmd1.ExecuteNonQuery()
          cmd1.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')"
          cmd1.ExecuteNonQuery()
          conn.Close()
    
    '==========================================================================
          ' Create a workbook with a table named InventoryData. The table has 3 
          ' fields: Product (char 255), Qty (float) and Price (currency). 
    '==========================================================================
    
          conn.ConnectionString = m_sConn2
          conn.Open()
          Dim cmd2 As New OleDbCommand()
          cmd2.Connection = conn
          cmd2.CommandText = "CREATE TABLE InventoryData (Product char(255), Qty float, Price currency)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, 1.35)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, 0.89)"
          cmd2.ExecuteNonQuery()
          conn.Close()
    
          ' NOTE: You can ALTER and DROP tables in a similar fashion.
    
    End Sub
    
    Public Sub Retrieve_Records()
    
          '==========================================================
          'Use a DataReader to read data from the EmployeeData table.
          '==========================================================
    
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd1 As New System.Data.OleDb.OleDbCommand("Select * From [EmployeeData$]", conn1)
          Dim rdr As OleDbDataReader = cmd1.ExecuteReader
    
          Debug.WriteLine(vbCrLf & "EmployeeData:" & vbCrLf & "=============")
          Do While rdr.Read()
             Debug.WriteLine(System.String.Format("{0,-10}{1, -15}{2}", _
                rdr.GetString(0), rdr.GetString(1), _
                rdr.GetDateTime(2).ToString("d")))
          Loop
          rdr.Close()
          conn1.Close()
    
          '========================================================
          'Use a DataSet to read data from the InventoryData table.
          '========================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds)
          Debug.WriteLine(vbCrLf & "InventoryData:" & vbCrLf & "==============")
          Dim dr As DataRow
          For Each dr In ds.Tables(0).Rows'Show results in output window
             Debug.WriteLine(System.String.Format("{0,-15}{1, -6}{2}", _
                dr("Product"), dr("Qty"), dr("Price")))
          Next
          conn2.Close()
    
    End Sub
    
    Public Sub Add_Records()
    
    '==========================================================================
          ' Run an INSERT INTO command to add new records to the workbook. 
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('CCC', 'Charlie', '10/14/48')"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('DDD', 'Deloris', '7/19/98')"
          cmd.ExecuteNonQuery()
          conn1.Close()
    
          '====================================================================
          'Use the InsertCommand object to add new records to the InventoryData
          'table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyExcelTable")
    
          ' Generate the InsertCommand and add the parameters for the command.
          da.InsertCommand = New OleDbCommand( _
             "INSERT INTO [InventoryData$] (Product, Qty, Price) VALUES (?, ?, ?)", conn2)
          da.InsertCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
          da.InsertCommand.Parameters.Add("@Qty", OleDbType.Double).SourceColumn = "Qty"
          da.InsertCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
    
          ' Add two new records to the dataset.
          Dim dr As DataRow
          dr = ds.Tables(0).NewRow
          dr("Product") = "Bread" : dr("Qty") = 390 : dr("Price") = 1.89 : ds.Tables(0).Rows.Add(dr)
          dr = ds.Tables(0).NewRow
          dr("Product") = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 : ds.Tables(0).Rows.Add(dr)
    
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyExcelTable")
          conn2.Close()
    
    End Sub
    
    Public Sub Update_Records()
    
    '==========================================================================
          ' Run an UPDATE command to change a record in the EmployeeData
          ' table.
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "UPDATE [EmployeeData$] " & _
                        "SET NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'"
          cmd.ExecuteNonQuery()
          conn1.Close()
    
          '====================================================================
          ' Use the UpdateCommand object to modify records in the InventoryData
          ' table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyInventoryTable")
    
          ' Generate the UpdateCommand and add the parameters for the command.
          da.UpdateCommand = New OleDbCommand( _
             "UPDATE [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2)
          da.UpdateCommand.Parameters.Add("@Qty", OleDbType.Numeric).SourceColumn = "Qty"
          da.UpdateCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
          da.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
    
          ' Update the first two records.
          ds.Tables(0).Rows(0)("Qty") = 1000
          ds.Tables(0).Rows(0)("Price") = 10.1
          ds.Tables(0).Rows(1)("Qty") = 2000
          ds.Tables(0).Rows(1)("Price") = 20.2
    
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyInventoryTable")
          conn2.Close()
    
    End Sub
    
    Public Sub Update_Individual_Cells()
    
    '==========================================================================
          ' Update individual cells on the EmployeeData worksheet; 
          ' specifically, cells F3, G3, and I4 are modified.
    '==========================================================================
    
          ' NOTE: The connection string indicates that the table does *NOT* 
          ' have a header row.
          Dim conn As New System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", "HDR=NO"))
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
          cmd.CommandText = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "UPDATE [EmployeeData$I4:I4] SET F1 = 'Cell I4'"
          cmd.ExecuteNonQuery()
          conn.Close()
    
    End Sub
    
    Public Sub Use_External_Source()
    
          ' Open a connection to the sample Northwind Access database.
          Dim conn As New System.Data.OleDb.OleDbConnection( _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sNorthwind & ";")
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
    
    '=======================================================================
          ' Run an INSERT..INTO command on the Northwind database to append 
          ' the records from a table/query to an existing table in the Excel 
          ' workbook.
    '=======================================================================
          cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _
             "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees"
          cmd.ExecuteNonQuery()
    
    '==========================================================================
          ' Run a SELECT..INTO command on the Northwind database to insert 
          ' all the records from a table/query into a new sheet in the Excel 
          ' workbook.
    '==========================================================================
          cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:\ExcelData2.xls].[ProductSales]" & _
                          "FROM [Product Sales for 1997]"
          cmd.ExecuteNonQuery()
    
          conn.Close()
    
    End Sub
  7. Modifiez le chemin d'accès à la base de données exemple Les Comptoirs, pour le membre m_sNorthwind dans le code, si nécessaire.

À essayer

  1. Dans le menu Affichage, pointez sur Autres fenêtres, puis cliquez sur Sortie pour afficher la fenêtre Sortie.
  2. Appuyez sur la touche F5 pour générer et exécuter le programme.
  3. Cliquez sur Create_Workbook puis cliquez sur OK. La procédure Create_Workbook exécute les commandes CREATE TABLE pour créer deux nouveaux classeurs : C:\ExcelData1.xls et C:\ExcelData2.xls. ExcelData1.xls contient une feuille (table) nommée EmployeeData et ExcelData2.xls contient une feuille (table) nommée InventoryData. Les tables sont remplies d'enregistrements.

    REMARQUE : À chaque étape restante de ce test, ouvrez les classeurs dans Excel pour examiner les résultats. Sinon, cliquez sur Retrieve_Records pour consulter le contenu des tables dans la fenêtre de Sortie de Visual Studio .NET.
  4. Cliquez sur Retrieve_Records puis sur OK. La procédure Retrieve_Records extrait les enregistrements des tables et les affiche dans la fenêtre Sortie, comme suit :
    EmployeeData:
    =============
    AAA       Andrew         12/4/1955
    
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
  5. Cliquez sur Add_Records puis sur OK. La routine Add_Records ajoute deux enregistrements à chaque table :
    EmployeeData:
    =============
    AAA       Andrew         12/4/1955
    CCC       Charlie        10/14/1948
    DDD       Deloris        7/19/1998
    
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
    Bread          390   1.89
    Milk           99    2.59
  6. Cliquez sur Update_Records puis sur OK. La routine Update_Records met à jour deux enregistrements dans chaque classeur :
    EmployeeData:
    =============
    AAA       Aaron          5/4/1975
    CCC       Charlie        10/14/1948
    DDD       Deloris        7/19/1998
    
    InventoryData:
    ==============
    Cola           1000  10.1
    Chips          2000  20.2
    Bread          390   1.89
    Milk           99    2.59
  7. Cliquez sur Update_Individual_Cells puis sur OK. La routine Update_Individual_Cells modifie des cellules spécifiques sur la feuille de calcul EmployeeData dans ExcelData1.xls ; en particulier, les cellules F3, G3 et I4 sont mises à jour.
  8. Cliquez sur Use_External_Source puis cliquez sur OK. Lorsque vous utilisez une commande INSERT..INTO, la routine Use_External_Source ajoute des enregistrements de la table « Employees » de la base de données Les Comptoirs vers la feuille de calcul EmployeeData dans ExcelData1.xls. Par ailleurs, Use_External_Source utilise une commande SELECT..INTO pour créer une table (ou feuille) dans ExcelData2.xls qui contient tous les enregistrements de la table « Products » de la base de données Les Comptoirs.

    REMARQUE : Si vous cliquez sur Use_External_Source à plusieurs reprises, la liste Employees sera ajoutée plusieurs fois parce que la clé primaire n'est pas reconnue ou appliquée.

Mise en forme de cellule

Si vous utilisez ADO.NET pour ajouter ou mettre à jour des enregistrements dans un classeur existant, vous pouvez appliquer la mise en forme de cellule au classeur qui sera utilisé avec les enregistrements nouveaux ou mis à jour. Lorsque vous mettez à jour un enregistrement existant (ou une ligne) dans un classeur, la mise en forme de cellule est conservée. De plus, lorsque vous insérez un nouvel enregistrement (ou ligne) dans un classeur, le nouvel enregistrement hérite de la mise en forme de la ligne au-dessus de lui.

La procédure suivante montre comment vous pouvez utiliser la mise en forme dans un classeur avec l'exemple de code :
  1. Appuyez sur la touche F5 pour générer et exécuter l'exemple.
  2. Sur Form1, cliquez sur Create_Workbook puis cliquez sur OK.
  3. Démarrez Microsoft Excel et ouvrez C:\ExcelData1.xls.
  4. Appliquez un style de police de caractère gras à la cellule A2.
  5. Appliquez un style italique, souligné à la cellule B2 et alignez au centre.
  6. Appliquez un format de date longue à la cellule C2.
  7. Enregistrez et fermez C:\ExcelData1.xls.
  8. Sur Form1, cliquez sur Add_Records puis cliquez sur OK.
  9. Ouvrez C:\ExcelData1.xls dans Excel et notez que les deux nouvelles lignes ont hérité de la mise en forme de la première ligne.

Limitations

Voici quelques limitations du Fournisseur Jet OLE DB quant aux sources de données Excel :
  • Vous ne pouvez pas insérer de formules dans les cellules à l'aide d'ADO.NET.
  • Le Fournisseur Jet OLE DB est incapable de fournir des informations de clé/d'index pour les tables dans un classeur Excel. Pour cette raison, vous ne pouvez pas utiliser CommandBuilder pour générer automatiquement des mises à jour et insertions pour les enregistrements dans un classeur Excel.

Références

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft.
316756 PROBLÈME : Une erreur se produit lorsque vous utilisez ADO.NET OLEDbDataAdapter pour modifier le classeur Excel
257819 COMMENT FAIRE : Utiliser ADO avec des données Excel à partir de Visual Basic ou de VBA
306022 Comment faire pour transférer des données vers un classeur Excel en utilisant Visual Basic .NET
306023 Comment faire pour transférer des données vers un classeur Excel en utilisant Visual C# .NET
311731 Comment faire pour interroger et afficher des données Excel avec ASP.NET, ADO.NET et Visual Basic .NET
306572 Comment faire pour interroger et afficher des données Excel avec ASP.NET, ADO.NET et Visual C# .NET
278973 EXEMPLE : ExcelADO montre comment utiliser ADO pour lire et écrire des données dans des classeurs Excel

Propriétés

Numéro d'article: 316934 - Dernière mise à jour: jeudi 15 juin 2006 - Version: 7.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002
  • Microsoft Excel 2000 Standard
  • Microsoft Visual Basic .NET 2002 Initiation
Mots-clés : 
kbhowtomaster KB316934
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