Použití webové služby XML pomocí ASP.NET z makra Office VBA ve Wordu nebo Excelu

Souhrn

Tento článek ukazuje, jak používat webovou službu XML pomocí ASP.NET z makra jazyka Visual Basic for Applications (VBA) ve Wordu nebo Excelu.

Další informace

Aby bylo možné úspěšně komunikovat s webovou službou XML pomocí ASP.NET z makra Office, musí být sada SOAP Toolkit nainstalována v klientském počítači, na kterém je makro spuštěno. Proto je pro ukázku v tomto článku vyžadována sada SOAP Toolkit. Podrobnosti o sadě SOAP Toolkit, včetně pokynů ke stažení.

Vytvoření webové služby XML pomocí ASP.NET

  1. Spusťte Microsoft Visual Studio .NET. V nabídce Soubor klikněte na Nový a potom klikněte na Project. V dialogovém okně Nový projekt klepněte na položku Projekty jazyka Visual Basic v části Typy projektů a potom klepněte na tlačítko Webové služby XML pomocí ASP.NET v části Šablony. Pojmenujte projekt SQLQuery a klikněte na OK. Ve výchozím nastavení se zobrazí formulář návrhu pro Service1.

  2. V nabídce Zobrazit klikněte na Kód a zobrazte okno kódu pro Service1.

  3. Do horní části okna kódu vložte následující kód:

    Imports System.Data.SqlClient
    
  4. Do třídy Service1 (těsně před koncovou třídu) vložte následující kód.

    Poznámka Před spuštěním tohoto kódu je nutné změnit uživatelské jméno> a heslo id uživatele <=<silné heslo> na správné hodnoty. Ujistěte se, že ID uživatele má příslušná oprávnění k provedení této operace s databází.

    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
    
    

Poznámka

Upravte konstantu strConn v kódu tak, aby se jedná o platný připojovací řetězec pro databázi SQL Server pubs.

Testování webové služby

  1. Stisknutím klávesy F5 sestavte a spusťte řešení webové služby. Při spuštění webové služby z integrovaného vývojového prostředí (IDE) rozhraní .NET načte aplikace Microsoft Internet Explorer z vašeho řešení soubor Service1.asmx.

  2. Otestujte metodu GetIDs. Uděláte to tak, že kliknete na hypertextový odkaz GetID a pak kliknete na Vyvolat.

    Metoda vrátí seznam ID autora, které webová služba extrahoovala z databáze pubs. Výsledky se zobrazí v prohlížeči jako XML.

  3. Zavřete okno prohlížeče nebo okna a vraťte se do sady Visual Studio.

  4. Opětovným stisknutím klávesy F5 spusťte webovou službu.

  5. Otestujte metodu QueryDatabase. Chcete-li to provést, klepněte na hypertextový odkaz QueryDatabase, zadejte 409-56-7008 pro parametr sID a klepněte na tlačítko Vyvolat.

    Metoda vrátí podrobnosti pro autora s ID 409-56-7008. Výsledky se zobrazí v prohlížeči jako XML.

  6. Zavřete okno prohlížeče nebo okna a ukončete tak webovou službu.

Použití webové služby z Wordu

V této ukázce se používá šablona Elegantní fax, která se dodává s Wordem. Tato ukázka bez této šablony nefunguje. Pokud chcete šablonu nainstalovat, postupujte takto:

  1. Spusťte průvodce instalací Office.
  2. V průvodci klikněte na Přidat nebo odebrat funkce.
  3. V části Funkce k instalaci rozbalte položku Microsoft Excel pro Windows. Klepněte na položku Šablony tabulek, klepněte na příkaz Spustit z tohoto počítače a potom klepněte na tlačítko Aktualizovat.

Pokud chcete použít webovou službu z Wordu, postupujte takto:

  1. Spusťte aplikaci Word. Ve výchozím nastavení se vytvoří prázdný dokument.

  2. V nabídce Nástroje klepněte na příkaz Makro a potom klepněte na příkaz Editor jazyka Visual Basic. V nabídce Vložení klikněte na Modul a vložte prázdný modul kódu.

  3. V nabídce **Nástroje **klikněte na Odkazy.

  4. V dialogovém okně Odkazy vyberte knihovnu typů Microsoft SOAP a potom klepněte na tlačítko OK.

    Poznámka Není-li v dialogovém okně Odkazy k dispozici knihovna typů PROTOKOLU SOAP společnosti Microsoft, klikněte na tlačítko Procházet. V dialogovém okně Přidat odkaz přejděte do adresáře C:\Program Files\Common Files\MSSoap\Binaries a vyberte mssoap1.dll. Klepněte na tlačítko Otevřít a potom klepněte na tlačítko OK.

  5. Do modulu kódu vložte následující kód:

    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
    
    

    POZNÁMKA Upravte konstantu sServer tak, aby odkazovaly na server, který je hostitelem webové služby, kterou jste právě vytvořili.

  6. V nabídce Vložit klepněte na tlačítko UserForm vložit prázdný formulář uživatele.

  7. Umístěte do formuláře velký seznam a příkazové tlačítko.

  8. V zobrazení nabídky, klepněte na tlačítko Kód změnit do okna kódu pro formulář uživatele.

  9. Obsah okna kódu nahraďte následujícím kódem:

    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
    
  10. Zavřete editor jazyka VBA a vraťte se do dokumentu.

  11. V nabídce Nástroje klepněte na příkaz Makro a potom klepněte na příkaz Makra. V dialogovém okně Makra spusťte makro ShowForm a zobrazte seznam ID. Ze seznamu vyberte ID a kliknutím na příkazové tlačítko vygenerujte faxový dokument s informacemi o daném uživateli.

Použití webové služby z Excelu

Tato ukázka používá šablonu Prodejní faktura, která se dodává s Excelem. Tato ukázka bez této šablony nefunguje. Pokud chcete šablonu nainstalovat, postupujte takto:

  1. Spusťte průvodce instalací Office.
  2. V průvodci klikněte na Přidat nebo odebrat funkce.
  3. V části Funkce k instalaci rozbalte položku Microsoft Excel pro Windows, rozbalte položku Šablony tabulek a potom klikněte na položku Prodejní faktura. Klepněte na tlačítko Spustit z tohoto počítače a klepněte na tlačítko Aktualizovat.

Pokud chcete použít webovou službu z Excelu, postupujte takto:

  1. Spusťte Excel. Ve výchozím nastavení se vytvoří prázdný sešit.

  2. V nabídce Nástroje klepněte na příkaz Makro a potom klepněte na příkaz Editor jazyka Visual Basic. V nabídce Vložení klikněte na Modul a vložte prázdný modul kódu.

  3. V nabídce **Nástroje **klikněte na Odkazy.

  4. V dialogovém okně Odkazy vyberte knihovnu typů Microsoft SOAP a potom klepněte na tlačítko OK.

    Poznámka Není-li v dialogovém okně Odkazy k dispozici knihovna typů PROTOKOLU SOAP společnosti Microsoft, klikněte na tlačítko Procházet. V dialogovém okně Přidat odkazpřejděte do adresáře C:\Program Files\Common Files\MSSoap\Binaries a vyberte mssoap1.dll. Klepněte na tlačítko Otevřít a potom klepněte na tlačítko OK.

  5. Do modulu kódu vložte následující kód:

    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
    
    

    Poznámka Upravte konstantu sServer tak, aby odkazovaly na server, který je hostitelem webové služby, kterou jste právě vytvořili. Upravte konstantu sTemplatePath tak, aby odkazovaly na správnou cestu k souboru faktury. Pro Office 2000 je výchozím umístěním pro tento soubor C:\Microsoft Office\Templates\1033\Invoice.xlt. Pro Office XP je výchozím umístěním C:\Microsoft Office\Templates\1033\Sales Invoice.xlt.

  6. V nabídce Vložit klepněte na tlačítko UserForm vložit prázdný formulář uživatele.

  7. Umístěte do formuláře velký seznam a příkazové tlačítko.

  8. V zobrazení nabídky, klepněte na tlačítko Kód změnit do okna kódu pro formulář uživatele.

  9. Obsah okna kódu nahraďte následujícím kódem:

    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
    
    
  10. Zavřete editor jazyka VBA a vraťte se do sešitu.

  11. V nabídce Nástroje klepněte na příkaz Makro a potom klepněte na příkaz Makra. V dialogovém okně Makra spusťte makro ShowForm a zobrazte seznam ID. V seznamu zvolte ID a kliknutím na příkazové tlačítko vygenerujte fakturu s informacemi o daném uživateli.

Odkazy

Další informace o webových službách naleznete v článku znalostní báze Microsoft Knowledge Base:

301273 , jak napsat jednoduchou webovou službu pomocí jazyka Visual Basic .NET