Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Résumé
Cet article montre comment utiliser un service web XML à l’aide de ASP.NET à partir d’une macro Visual Basic pour Applications (VBA) dans Word ou Excel.
Informations supplémentaires
Pour pouvoir communiquer avec un service web XML à l’aide d’ASP.NET à partir d’une macro Office, le kit de ressources SOAP doit être installé sur l’ordinateur client sur lequel la macro s’exécute. Par conséquent, le kit de ressources SOAP est requis pour la démonstration décrite dans cet article. Pour plus d’informations sur le kit de ressources SOAP, y compris les instructions de téléchargement.
Créer le service web XML à l’aide de ASP.NET
Démarrez Microsoft Visual Studio .NET. Dans le menu Fichier, cliquez sur Nouveau, puis sur Projet. Dans la boîte de dialogue Nouveau projet, cliquez sur Projets Visual Basic sous Types de projets, puis sur service web XML à l’aide de ASP.NET sous Modèles. Nommez le projet SQLQuery, puis cliquez sur OK. Le formulaire de conception pour Service1 s’affiche par défaut.
Dans le menu Affichage, cliquez sur Code pour afficher la fenêtre de code pour Service1.
Collez le code suivant en haut de la fenêtre de code :
Imports System.Data.SqlClient
Collez le code suivant dans la classe Service1 (juste avant la classe End).
Note Vous devez remplacer le nom d’utilisateur <> et le mot de passe =<mot de passe> fort par les valeurs correctes avant d’exécuter ce code. Assurez-vous que l’ID d’utilisateur dispose des autorisations appropriées pour effectuer cette opération sur la base de données.
Private Const strConn = "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=localhost" <WebMethod()> Public Function GetIDs() As String() Dim i As Integer ' Create an open connection. Dim oConn As New SqlConnection(strConn) oConn.Open() Dim oDataset As New System.Data.DataSet() ' Execute the query. Dim oAdapter As New SqlDataAdapter("SELECT au_id FROM authors", oConn) ' Fill the dataset. oAdapter.Fill(oDataset) Dim s(oDataset.Tables(0).Rows.Count - 1) As String ' Create an array of IDs. For i = 0 To oDataset.Tables(0).Rows.Count - 1 s(i) = oDataset.Tables(0).Rows(i).ItemArray.GetValue(0) Next i ' Return the array. Return s End Function <WebMethod()> Public Function QueryDatabase(ByVal sID As String) As String() Dim i As Integer ' Create an open a connection. Dim oConn As New SqlConnection(strConn) oConn.Open() Dim oCommand As New SqlCommand("SELECT * FROM authors WHERE au_id='" + sID + "'", oConn) Dim oReader As SqlDataReader ' Execute the query and assign results to a SqlDataReader. oReader = oCommand.ExecuteReader() oReader.Read() Dim s(7) As String ' Build an array of results. For i = 0 To 7 s(i) = CType(oReader.GetValue(i), String) Next ' Return the array. Return s End Function
Remarque
Modifiez la constante strConn dans le code afin qu’il s’agit d’une chaîne de connexion valide pour la base de données SQL Server pubs.
Tester le service web
Appuyez sur F5 pour générer et exécuter la solution de service Web. Lorsque vous exécutez le service Web à partir de l’environnement de développement intégré (IDE) .NET, Microsoft Internet Explorer charge Service1.asmx à partir de votre solution.
Testez la méthode GetIDs. Pour ce faire, cliquez sur le lien hypertexte GetIDs, puis sur Appeler.
La méthode retourne une liste d’ID d’auteur que le service Web a extraits de la base de données pubs. Les résultats sont affichés dans le navigateur sous forme de code XML.
Fermez la fenêtre ou les fenêtres du navigateur et revenez à Visual Studio.
Appuyez de nouveau sur F5 pour exécuter le service Web.
Testez la méthode QueryDatabase. Pour ce faire, cliquez sur le lien hypertexte QueryDatabase, tapez 409-56-7008 pour le paramètre sID, puis cliquez sur Appeler.
La méthode retourne les détails de l’auteur avec l’ID 409-56-7008. Les résultats sont affichés dans le navigateur sous forme de code XML.
Fermez la fenêtre ou les fenêtres du navigateur pour mettre fin au service Web.
Utiliser le service web à partir de Word
Cet exemple utilise le modèle Elegant Fax fourni avec Word. Cet exemple ne fonctionne pas sans ce modèle. Pour installer le modèle, procédez comme suit :
- Démarrez l’Assistant Installation d’Office.
- Dans l’Assistant, cliquez sur Ajouter ou supprimer des fonctionnalités.
- Sous Fonctionnalités à installer, développez Microsoft Excel pour Windows. Cliquez sur Modèles de feuille de calcul, sur Exécuter à partir de mon ordinateur, puis sur Mettre à jour.
Pour utiliser le service Web à partir de Word, procédez comme suit :
Démarrez Word. Un document vide est créé par défaut.
Dans le menu Outils, cliquez sur Macro, puis sur Visual Basic Editor. Dans le menu Insertion, cliquez sur Module pour insérer un module de code vide.
Dans le menu **Outils **, cliquez sur Références.
Dans la boîte de dialogue Références , sélectionnez la bibliothèque de types MICROSOFT SOAP, puis cliquez sur OK.
Note Si la bibliothèque de types Microsoft SOAP n’est pas disponible dans la boîte de dialogue Références , cliquez sur Parcourir. Dans la boîte de dialogue Ajouter une référence , accédez au répertoire C:\Program Files\Common Files\MSSoap\Binaries, puis sélectionnez mssoap1.dll. Cliquez sur Ouvrir , puis sur OK.
Collez le code suivant dans le module de code :
Public Const sServer = "localhost" Sub GenerateForm(sID As String) Dim oSOAPClient As Object On Error GoTo errhand Set oSOAPClient = CreateObject("MSSOAP.SoapClient") oSOAPClient.mssoapinit "http://" + sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap" Dim arrTemp() As String arrTemp = oSOAPClient.QueryDatabase(sID) Dim oDoc As Word.Document Set oDoc = Application.Documents.Add("Elegant Fax.dot") oDoc.Bookmarks("Company").Range.Text = arrTemp(2) + " " + arrTemp(1) + vbCrLf + _ arrTemp(4) + vbCrLf + arrTemp(5) + ", " + arrTemp(6) + " " + arrTemp(7) + vbCrLf + _ arrTemp(3) Exit Sub errhand: MsgBox "Error #" + Err.Number + ": " + Err.Description End Sub Sub ShowForm() ' Show the dialog box to the user. UserForm1.Show End Sub
NOTE Modifiez la constante sServer pour pointer vers le serveur qui héberge le service Web que vous venez de créer.
Dans le menu Insertion, cliquez sur UserForm pour insérer un formulaire utilisateur vide.
Placez une grande zone de liste et un bouton de commande sur le formulaire.
Dans le menu Affichage, cliquez sur Code pour passer à la fenêtre de code du formulaire utilisateur.
Remplacez le contenu de la fenêtre de code par ce qui suit :
Private Sub CommandButton1_Click() ' Generate a FAX based on the ID. GenerateForm ListBox1.List(ListBox1.ListIndex) UserForm1.Hide End Sub Private Sub UserForm_Initialize() Dim oSOAPClient As Object ' Create a SOAP client. Set oSOAPClient = CreateObject("MSSOAP.SoapClient") ' Initialize the SOAP client to the Web service. oSOAPClient.mssoapinit "http://" + Module1.sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap" Dim arrTemp() As String ' Get an array of IDs. arrTemp = oSOAPClient.GetIDs() ' Fill the list box with IDs. For i = 0 To UBound(arrTemp) ListBox1.AddItem arrTemp(i) Next End Sub
Fermez l’éditeur VBA pour revenir au document.
Dans le menu Outils, cliquez sur Macro, puis sur Macros. Dans la boîte de dialogue Macros, exécutez la macro ShowForm pour afficher la liste des ID. Sélectionnez un ID dans la liste, puis cliquez sur le bouton de commande pour générer un document de télécopie contenant les informations de cet utilisateur.
Utiliser le service web à partir d’Excel
Cet exemple utilise le modèle sales invoice fourni avec Excel. Cet exemple ne fonctionne pas sans ce modèle. Pour installer le modèle, procédez comme suit :
- Démarrez l’Assistant Installation d’Office.
- Dans l’Assistant, cliquez sur Ajouter ou supprimer des fonctionnalités.
- Sous Fonctionnalités à installer, développez Microsoft Excel pour Windows, développez modèles de feuille de calcul, puis cliquez sur Facture des ventes. Cliquez sur Exécuter à partir de mon ordinateur, puis sur Mettre à jour.
Pour utiliser le service Web à partir d’Excel, procédez comme suit :
Démarrez Excel. Un classeur vide est créé par défaut.
Dans le menu Outils, cliquez sur Macro, puis sur Visual Basic Editor. Dans le menu Insertion, cliquez sur Module pour insérer un module de code vide.
Dans le menu **Outils **, cliquez sur Références.
Dans la boîte de dialogue Références , sélectionnez la bibliothèque de types MICROSOFT SOAP, puis cliquez sur OK.
Note Si la bibliothèque de types Microsoft SOAP n’est pas disponible dans la boîte de dialogue Références , cliquez sur Parcourir. Dans la boîte de dialogue Ajouter une référence, accédez au répertoire C:\Program Files\Common Files\MSSoap\Binaries, puis sélectionnez mssoap1.dll. Cliquez sur Ouvrir , puis sur OK.
Collez le code suivant dans le module de code :
Const sTemplatePath = "C:\Microsoft Office\Templates\1033\Sales Invoice.xlt" Public Const sServer = "localhost" Sub GenerateForm(sID As String) Dim oSOAPClient As Object On Error GoTo errhand Set oSOAPClient = CreateObject("MSSOAP.SoapClient") oSOAPClient.mssoapinit "http://" + sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap" Dim arrTemp() As String arrTemp = oSOAPClient.QueryDatabase(sID) Dim oBook As Excel.Workbook Set oBook = Application.Workbooks.Add(sTemplatePath) With oBook.ActiveSheet If If CInt(Application.Version) = 10 Or CInt(Application.Version) = 11 Then .Range("D13").Value = arrTemp(2) + " " + arrTemp(1) .Range("D14").Value = arrTemp(4) .Range("D15").Value = arrTemp(5) .Range("F15").Value = arrTemp(6) .Range("H15").Value = arrTemp(7) .Range("D16").Value = arrTemp(3) .Range("M13").Value = CStr(Date) .Range("C19").Value = "45.8" .Range("D19").Value = "Consulting hours" .Range("L19").Value = "75" ElseIf CInt(Application.Version) = 9 Then .Range("data5").Value = arrTemp(2) + " " + arrTemp(1) .Range("data6").Value = arrTemp(4) .Range("data7").Value = arrTemp(5) .Range("data8").Value = arrTemp(6) .Range("data9").Value = arrTemp(7) .Range("data10").Value = arrTemp(3) .Range("data11").Value = "45.8" .Range("data12").Value = "Consulting hours" .Range("data13").Value = "75" End If End With Exit Sub errhand: MsgBox "Error #" + Err.Number + ": " + Err.Description End Sub Sub ShowForm() ' Show the dialog box to the user. UserForm1.Show End Sub
Note Modifiez la constante sServer pour pointer vers le serveur qui héberge le service Web que vous venez de créer. Modifiez la constante sTemplatePath pour qu’elle pointe vers le chemin correct pour le fichier de facture. Pour Office 2000, l’emplacement par défaut de ce fichier est C:\Microsoft Office\Templates\1033\Invoice.xlt. Pour Office XP, l’emplacement par défaut est C:\Microsoft Office\Templates\1033\Sales Invoice.xlt.
Dans le menu Insertion, cliquez sur UserForm pour insérer un formulaire utilisateur vide.
Placez une grande zone de liste et un bouton de commande sur le formulaire.
Dans le menu Affichage, cliquez sur Code pour passer à la fenêtre de code du formulaire utilisateur.
Remplacez le contenu de la fenêtre de code par ce qui suit :
Private Sub CommandButton1_Click() ' Generate a FAX based on the ID. GenerateForm ListBox1.List(ListBox1.ListIndex) UserForm1.Hide End Sub Private Sub UserForm_Initialize() Dim oSOAPClient As Object ' Create a SOAP client. Set oSOAPClient = CreateObject("MSSOAP.SoapClient") ' Initialize the SOAP client to the Web service. oSOAPClient.mssoapinit "http://" + Module1.sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap" Dim arrTemp() As String ' Get an array of IDs. arrTemp = oSOAPClient.GetIDs() ' Fill the list box with IDs. For i = 0 To UBound(arrTemp) ListBox1.AddItem arrTemp(i) Next End Sub
Fermez l’éditeur VBA pour revenir au classeur.
Dans le menu Outils, cliquez sur Macro, puis sur Macros. Dans la boîte de dialogue Macros, exécutez la macro ShowForm pour afficher la liste des ID. Choisissez un ID dans la liste, puis cliquez sur le bouton de commande pour générer une facture avec les informations de cet utilisateur.
References
Pour plus d’informations sur les services Web, consultez l’article de la Base de connaissances Microsoft :
301273 Comment écrire un service web simple à l’aide de Visual Basic .NET