Automatisieren von Word zum Ausführen eines clientseitigen Seriendrucks mithilfe von XML aus SQL Server

Zusammenfassung

In diesem Artikel wird veranschaulicht, wie Sie Microsoft Word aus clientseitigen Skripts automatisieren, um einen Seriendruck für Bezeichnungen auszuführen. Word verfügt nicht über eine direkte Methode zum Verwenden von XML-Daten als Datenquelle für einen Seriendruck. Das Beispiel veranschaulicht ASP-Code (Active Server Pages), der ein XML-Recordset von einem Webserver an einen Client streamt. Clientseitiges Skript konvertiert diese XML-Daten in eine durch Trennzeichen getrennte Textdatei, die lokal für den Client ist, und automatisiert dann Word, um einen Seriendruck auszuführen, indem die lokale Textdatei als Seriendruck-Datenquelle verwendet wird.

Weitere Informationen

ActiveX Data Objects (ADO) 2.5 und höher ermöglicht das Speichern von Datensatzdaten im XML-Format. Mithilfe von ASP auf einem Webserver können Sie ein ADO-Recordset aus einer Datenbank erstellen und die Daten als XML an Ihre Clients zurückgeben. Clients können wiederum ADO verwenden, um das XML-Recordset zu lesen und die Daten nach Bedarf zu bearbeiten. Links zu zusätzlichen Ressourcen zur Verwendung von ADO mit XML finden Sie im Abschnitt "Verweise" dieses Artikels.

Zur Veranschaulichung verwendet das folgende Beispiel die Pubs-Beispieldatenbank in Microsoft SQL Server. Ein ähnlicher Code kann jedoch verwendet werden, um einen Seriendruck mit jeder Datenbank auszuführen, mit der Sie eine ADO-Verbindung herstellen können.

Beispiel

  1. Erstellen Sie auf Ihrem Webserver ein virtuelles Verzeichnis namens WordMailMerge.

  2. Verwenden Sie Editor, um eine Datei mit dem Namen "Default.asp" zu erstellen, die den unten angegebenen Code enthält. Speichern Sie die Datei im virtuellen WordMailMerge-Verzeichnis.

    <%@ Language=VBScript %>
    <HTML>
    <BODY>
    <SCRIPT LANGUAGE=VBScript>
    Sub CreateDataDoc(oApp)
      ' Declare variables.
      Dim sServer,oDoc,oRS,sTemp,sHead,oRange,oField
    
    ' Place your server's name here.
      sServer = "<servername>"
      ' Create a new document.
      Set oDoc = oApp.Documents.Add
      ' Create a new recordset.
      Set oRS = CreateObject("ADODB.Recordset")
      ' Open the XML recordset from the server
      oRS.Open "http://" & sServer & "/WordMailMerge/Getdata.asp"
      ' Convert the recordset to a string.
      sTemp = oRS.GetString(2, -1, vbTab)  ' 2 = adClipString
    
    ' Append the field names to the front of the string.
      For Each oField In oRS.Fields
        sHead = sHead & oField.Name & vbTab
      Next
    
    ' Strip off the last tab.
      sTemp = Mid(sHead, 1, Len(sHead) - 1) & vbCrLf & sTemp
    
    ' Get a range object and insert the text into the document.
      Set oRange = oDoc.Range
      oRange.Text = sTemp
    
    ' Convert the text to a table.
      oRange.ConvertToTable vbTab
      ' Save the document to a temp file.
      oDoc.SaveAs "C:\data.doc"
      ' Close the document (no save).
      oDoc.Close False
    End Sub
    
    Sub ButtonClick()
      Dim oApp
      Dim oDoc
      Dim oMergedDoc
    
    ' Create an instance of Word.     
      Set oApp = CreateObject("Word.Application")
    
    ' Create our data file.
      CreateDataDoc oApp
    
    ' Add a new document.
      Set oDoc = oApp.Documents.Add
      With oDoc.MailMerge
        ' Add our fields.
        .Fields.Add oApp.Selection.Range, "au_fname"
        oApp.Selection.TypeText " "
        .Fields.Add oApp.Selection.Range, "au_lname"
        oApp.Selection.TypeParagraph
        .Fields.Add oApp.Selection.Range, "city"
        oApp.Selection.TypeText ", "
        .Fields.Add oApp.Selection.Range, "state"
        oApp.Selection.TypeParagraph
        .Fields.Add oApp.Selection.Range, "zip"
        oApp.Selection.TypeParagraph
    
    ' Create an autotext entry.
        Dim oAutoText
        Set oAutoText = oApp.NormalTemplate.AutoTextEntries.Add _
        ("MyLabelLayout", oDoc.Content)
        oDoc.Content.Delete
        .MainDocumentType = 1  ' 1 = wdMailingLabels
    
    ' Open the saved data source.
        .OpenDataSource "C:\data.doc"
    
    ' Create a new document.
        oApp.MailingLabel.CreateNewDocument "5160", "", _
             "MyLabelLayout", , 4  ' 4 = wdPrinterManualFeed
    
    .Destination = 0  ' 0 = wdSendToNewDocument
        ' Execute the mail merge.
        .Execute
    
    oAutoText.Delete
      End With
    
    ' Close the mail merge edit document.
      oDoc.Close False
      ' Get the current document.
      Set oMergedDoc = oApp.ActiveDocument
      ' Show Word to the user.
      oApp.Visible = True
    
    ' Uncomment these lines to save the merged document locally.
      'oMergedDoc.SaveAs "C:\test.doc"
      'oMergedDoc.Close False
      'oApp.Quit False
    End Sub
    </SCRIPT>
    <INPUT type=button value="Create Word Document" onclick="VBScript:ButtonClick">
    </BODY>
    </HTML>
    
    
  3. Verwenden Sie Editor, um eine Datei mit dem Namen "Getdata.asp" zu erstellen, die den unten angegebenen Code enthält. Speichern Sie die Datei im virtuellen WordMailMerge-Verzeichnis.

    <%@ Language=VBScript %>
    <%
      Dim oConn,oRS,strConn,sSQLServer
    
    ' Build the connection string. Replace <username> and <strong password> with
      ' the username and password of an account that has permissions on the database.
      sSQLServer = "<servername>"
      strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;" & _
                "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=" & sSQLServer
      ' Set our return content type.
      Response.ContentType = "text/xml"
    
    ' Create a connection.
      set oConn = Server.CreateObject("ADODB.Connection")
      ' Open the connection.
      oConn.Open strConn
      ' Execute the SQL statement.
      set oRS = oConn.Execute(“SELECT * FROM AUTHORS”)
      ' Save the recordset in the Response object.
      oRS.Save Response,1
    %>
    
    
  4. Ändern Sie die sServer-Variable in Default.asp so, dass sie auf Ihren Webserver verweist, und ändern Sie die sSQLServer-Variable in Getdata.asp so, dass sie auf Ihre SQL Server verweist.

  5. Starten Sie Internet Explorer, und navigieren Sie zu https://servername/WordMailMerge/Default.asp (wobei "Servername" der Name Ihres Webservers ist).

  6. Klicken Sie auf die Schaltfläche auf der Webseite, um Word zu automatisieren und den Seriendruck auszuführen. Nach Abschluss der Automatisierung wird Word mit einem neuen Dokument angezeigt, das die Adressetiketten enthält, die sich aus dem Seriendruck ergeben haben.

References

Klicken Sie für weitere Informationen auf die folgenden Artikelnummern, um die Artikel in der Microsoft Knowledge Base anzuzeigen:

258512 Automatisieren von Word aus Visual Basic zum Erstellen eines Seriendrucks für Adressetiketten