Come usare un servizio Web XML usando ASP.NET da una macro VBA di Office in Word o Excel

Riepilogo

Questo articolo illustra come usare un servizio Web XML usando ASP.NET da una macro Visual Basic, Applications Edition (VBA) in Word o Excel.

Ulteriori informazioni

Per comunicare correttamente con un servizio Web XML usando ASP.NET da una macro di Office, è necessario installare SOAP Toolkit nel computer client in cui viene eseguita la macro. Di conseguenza, SOAP Toolkit è necessario per la dimostrazione in questo articolo. Per informazioni dettagliate su SOAP Toolkit, incluse le istruzioni per il download.

Creare il servizio Web XML usando ASP.NET

  1. Avviare Microsoft Visual Studio .NET. Scegliere Nuovo dal menu File e quindi fare clic su Progetto. Nella finestra di dialogo Nuovo progetto fare clic su Progetti Visual Basic in Tipi di progetto e quindi su Servizio Web XML usando ASP.NET in Modelli. Assegnare al progetto il nome SQLQuery e fare clic su OK. Il modulo di progettazione per Service1 viene visualizzato per impostazione predefinita.

  2. Nel menu Visualizza fare clic su Codice per visualizzare la finestra del codice per Service1.

  3. Incollare il codice seguente nella parte superiore della finestra del codice:

    Imports System.Data.SqlClient
    
  4. Incollare il codice seguente nella classe Service1 (poco prima di End Class).

    Nota Prima di eseguire questo codice, è necessario modificare il nome utente <> e la password =<password> complessa con i valori corretti. Assicurarsi che l'ID utente disponga delle autorizzazioni appropriate per eseguire questa operazione nel database.

    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
    
    

Nota

Modificare la costante strConn nel codice in modo che sia una stringa di connessione valida per il database SQL Server pubs.

Testare il servizio Web

  1. Premere F5 per compilare ed eseguire la soluzione del servizio Web. Quando si esegue il servizio Web dall'ambiente di sviluppo integrato (IDE) .NET, Microsoft Internet Explorer carica Service1.asmx dalla soluzione.

  2. Testare il metodo GetIDs. A tale scopo, fare clic sul collegamento ipertestuale GetID, quindi fare clic su Richiama.

    Il metodo restituisce un elenco di ID autore estratti dal servizio Web dal database pubs. I risultati vengono visualizzati nel browser come XML.

  3. Chiudere la finestra o le finestre del browser e tornare a Visual Studio.

  4. Premere di nuovo F5 per eseguire il servizio Web.

  5. Testare il metodo QueryDatabase. A tale scopo, fare clic sul collegamento ipertestuale QueryDatabase, quindi digitare 409-56-7008 per il parametro sID e fare clic su Richiama.

    Il metodo restituisce i dettagli per l'autore con l'ID 409-56-7008. I risultati vengono visualizzati nel browser come XML.

  6. Chiudere la finestra del browser o le finestre per terminare il servizio Web.

Usare il servizio Web da Word

Questo esempio usa il modello Fax elegante fornito con Word. Questo esempio non funziona senza questo modello. Per installare il modello, seguire questa procedura:

  1. Avviare l'installazione guidata di Office.
  2. Nella procedura guidata fare clic su Aggiungi o Rimuovi funzionalità.
  3. In Funzionalità da installare espandere Microsoft Excel per Windows. Fare clic su Modelli di foglio di calcolo, su Esegui dal computer personale e quindi su Aggiorna.

Per usare il servizio Web da Word, seguire questa procedura:

  1. Avviare Word. Per impostazione predefinita, viene creato un documento vuoto.

  2. Scegliere Macro dal menu Strumenti, quindi fare clic su Visual Basic Editor. Nel menu Inserisci fare clic su Modulo per inserire un modulo di codice vuoto.

  3. Nel menu **Strumenti **fare clic su Riferimenti.

  4. Nella finestra di dialogo Riferimenti selezionare Libreria dei tipi SOAP Microsoft e quindi fare clic su OK.

    Nota Se la libreria dei tipi SOAP Microsoft non è disponibile nella finestra di dialogo Riferimenti , fare clic su Sfoglia. Nella finestra di dialogo Aggiungi riferimento passare alla directory C:\Programmi\File comuni\MSSoap\Binaries e selezionare mssoap1.dll. Fare clic su Apri e quindi su OK.

  5. Incollare il codice seguente nel modulo di codice:

    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
    
    

    NOTA Modificare la costante sServer in modo che punti al server che ospita il servizio Web appena creato.

  6. Scegliere UserForm dal menu Inserisci per inserire un modulo utente vuoto.

  7. Inserire una casella di riepilogo di grandi dimensioni e un pulsante di comando nel modulo.

  8. Scegliere Codice dal menu Visualizza per passare alla finestra del codice per il modulo utente.

  9. Sostituire il contenuto della finestra del codice con quanto segue:

    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. Chiudere l'editor VBA per tornare al documento.

  11. Scegliere Macro dal menu Strumenti, quindi fare clic su Macro. Nella finestra di dialogo Macro eseguire la macro ShowForm per visualizzare l'elenco di ID. Selezionare un ID nell'elenco e fare clic sul pulsante di comando per generare un documento fax con le informazioni dell'utente.

Usare il servizio Web da Excel

Questo esempio usa il modello Sales Invoice fornito con Excel. Questo esempio non funziona senza questo modello. Per installare il modello, seguire questa procedura:

  1. Avviare l'installazione guidata di Office.
  2. Nella procedura guidata fare clic su Aggiungi o Rimuovi funzionalità.
  3. In Funzionalità da installare espandere Microsoft Excel per Windows, modelli di foglio di calcolo e quindi fare clic su Fattura di vendita. Fare clic su Esegui dal computer personale e fare clic su Aggiorna.

Per usare il servizio Web da Excel, seguire questa procedura:

  1. Avviare Excel. Per impostazione predefinita viene creata una cartella di lavoro vuota.

  2. Scegliere Macro dal menu Strumenti, quindi fare clic su Visual Basic Editor. Nel menu Inserisci fare clic su Modulo per inserire un modulo di codice vuoto.

  3. Nel menu **Strumenti **fare clic su Riferimenti.

  4. Nella finestra di dialogo Riferimenti selezionare Libreria dei tipi SOAP Microsoft e quindi fare clic su OK.

    Nota Se la libreria dei tipi SOAP Microsoft non è disponibile nella finestra di dialogo Riferimenti , fare clic su Sfoglia. Nella finestra di dialogo Aggiungi riferimentopassare alla directory C:\Programmi\File comuni\MSSoap\Binaries e selezionare mssoap1.dll. Fare clic su Apri e quindi su OK.

  5. Incollare il codice seguente nel modulo di codice:

    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
    
    

    Nota Modificare la costante sServer in modo che punti al server che ospita il servizio Web appena creato. Modificare la costante sTemplatePath in modo che punti al percorso corretto per il file di fattura. Per Office 2000, il percorso predefinito per questo file è C:\Microsoft Office\Templates\1033\Invoice.xlt. Per Office XP, il percorso predefinito è C:\Microsoft Office\Templates\1033\Sales Invoice.xlt.

  6. Scegliere UserForm dal menu Inserisci per inserire un modulo utente vuoto.

  7. Inserire una casella di riepilogo di grandi dimensioni e un pulsante di comando nel modulo.

  8. Scegliere Codice dal menu Visualizza per passare alla finestra del codice per il modulo utente.

  9. Sostituire il contenuto della finestra del codice con quanto segue:

    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. Chiudere l'editor VBA per tornare alla cartella di lavoro.

  11. Scegliere Macro dal menu Strumenti, quindi fare clic su Macro. Nella finestra di dialogo Macro eseguire la macro ShowForm per visualizzare l'elenco di ID. Scegliere un ID dall'elenco e fare clic sul pulsante di comando per generare una fattura con le informazioni dell'utente.

Riferimenti

Per altre informazioni sui servizi Web, vedere l'articolo della Microsoft Knowledge Base:

301273 come scrivere un servizio Web semplice usando Visual Basic .NET