Verwenden von ASP zur RTF-Dokumenterstellung (Rich Text Format) zum Übertragen an Microsoft Word

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 270906 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
270906 How to use ASP to generate a Rich Text Format (RTF) document to stream to Microsoft Word
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie RTF-Dateien mit einem ASP-Skript erstellen und diese Dateien dann an Microsoft Word übertragen können. Diese Technik stellt eine Alternative zur serverseitigen Automatisierung von Microsoft Word für die Dokumenterstellung zur Laufzeit dar.

Hinweis: In diesem Artikel wird vorausgesetzt, dass Sie eine Kopie der Beispieldatenbank "Nordwind.mdb" aus Microsoft Access 2000, Microsoft Access 2002 oder Microsoft Office Access 2003 installiert haben.

Weitere Informationen

Das Erstellen von Word-Dokumenten über die serverseitige Automatisierung über ASP-Seiten hat Nachteile:
  • Leistung: Microsoft Word ist ein Out-of-Process-Automatisierungsserver. Die Ausführung von Out-of-Process-Aufrufen dauert länger.

  • Skalierbarkeit: Als Automatisierungsserver ist Microsoft Word stark beansprucht, da die Datei "Winword.exe" geladen werden muss, damit Sie die Vorteile des umfassenden Objektmodells von Word nutzen können.
Durch komplett neues Erstellen von Dokumenten ohne Verwendung des Word-Objektmodells, können Sie Ihre ASP-Anwendung skalierbarer machen und auch die Leistung steigern. Dieser Ansatz wird in den folgenden Beispielen verwendet, um die Verwendung von FileSystemObject zur Erstellung einer RTF-Datei zu veranschaulichen, die in Microsoft Word auf Browserclients interpretiert werden kann.

Das erste Beispiel zeigt, wie ASP zur Erstellung eines RTF-Dokuments verwendet wird, das Kopf- und Fußzeilen sowie eine Tabelle enthält und verschiedene Schriftstile und Farben für Text in dem Dokument verwendet. Im ersten Beispiel wird ADO verwendet, um auf Daten aus der Access-Beispieldatenbank "Nordwind" zur Erstellung eines Dokuments mit über 90 Seiten zuzugreifen.

Im zweiten Beispiel wird veranschaulicht, wie ein RTF-Dokument ähnlich wie bei einem Word-Seriendruck erstellt wird. Das daraus entstehende Dokument enthält Kopf- und Fußzeilen, verschiedene Absatzformatierungen und Seitenumbrüche und verwendet unterschiedliche Schriftstile und -typen in dem Dokument. In diesem Beispiel wird ebenfalls ADO verwendet, um auf die Nordwind-Datenbank zur Erstellung eines Dokuments mit über 170 Seiten zuzugreifen.

Hinweis: Die Rich Text Format-(RTF-)Spezifikation ist eine öffentliche Spezifikation zur Erstellung von RTF-kompatiblen Textdateien. Sie können die Dokumentation für die Spezifikation auf der folgenden MSDN-Website (Microsoft Developer Network) als Ressource zum Erstellen eigener RTF-Dateien verwenden. Die Spezifikation wird jedoch "wie besehen" bereitgestellt und wird nicht vom technischen Support von Microsoft unterstützt. Die aktuelle Version der RTF-Spezifikation finden Sie auf der folgenden MSDN-Website:
Rich Text Format (RTF) Specification 1.6
http://msdn2.microsoft.com/en-us/library/aa140277(office.10).aspx

ASP-Beispiel 1

Das folgende ASP-Beispiel zeigt die Erstellung eines RTF-Dokuments mit über 90 Seiten, das einen Bericht über berechnete Zahlen enthält.

Hinweis: Die Variable sConn in diesem Code enthält den Pfad zu der Nordwind-Datenbank. Vergewissern Sie sich, dass der bereitgestellte Pfad für Ihre Installation von Office korrekt ist. Sie müssen dem Ordner mit dem ASP-Code außerdem Schreib-Zugriff gewähren, damit das Dokument erstellt werden kann. Dieser Zugriff sollte auf bestimmte Benutzer einer Windows NT-Domäne begrenzt bleiben, kann jedoch für anonymen Zugriff auf Jeder angewendet werden.
<%@ Language=VBScript %>
<%

   Dim sRTF, sFileName, sConn
   sConn = "c:\program files\microsoft office\office\samples\northwind.mdb"

   Response.Buffer = True

   'Create the file for the RTF
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   sFileName = "sample1.doc"
   Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "\" & _
                                   sFileName, True)

   MyFile.WriteLine("{\rtf1")

   'Write the color table (for use in background and foreground colors)
   sRTF = "{\colortbl;\red0\green0\blue0;\red0\green0\blue255;" & _
          "\red0\green255\blue255;\red0\green255\blue0;" & _
          "\red255\green0\blue255;\red255\green0\blue0;" & _
          "\red255\green255\blue0;\red255\green255\blue255;}"
   MyFile.WriteLine(sRTF)

   'Write the title and author for the document properties
   MyFile.WriteLine("{\info{\title Sample RTF Document}" & _
                    "{\author Microsoft Developer Support}}")

   'Write the page header and footer
   MyFile.WriteLine("{\header\pard\qc{\fs50 " & _
                    "ASP-Generated RTF\par}{\fs18\chdate\par}\par\par}")
   MyFile.WriteLine("{\footer\pard\qc\brdrt\brdrs\brdrw10\brsp100" & _
                    "\fs18 Page " & _
                    "{\field{\*\fldinst PAGE}{\fldrslt 1}} of " & _
                    "{\field{\*\fldinst NUMPAGES}{\fldrslt 1}} \par}")

   'Write a sentence in the first paragraph of the document
   MyFile.WriteLine("\par\fs24\cf2 This is a sample \b RTF \b0 " & _
                    "document created with ASP.\cf0")

   'Connect to the database in read-only mode
   Dim conn, rs
   Set conn = Server.CreateObject("ADODB.Connection")
   conn.Provider = "Microsoft.Jet.OLEDB.4.0"
   conn.Mode = 1    'adModeRead=1
   conn.Open sConn
         
   'Execute a query that returns ID, Product name and amount of sale
   Set rs = Server.CreateObject("ADODB.Recordset")
   rs.Open "SELECT [Order Details].OrderID AS ID, " & _
           "Products.ProductName AS Name, " & _
           "[Order Details].[UnitPrice]*[Quantity] AS Amount " & _
           "FROM Products INNER JOIN [Order Details] ON " & _
           "Products.ProductID = [Order Details].ProductID " & _
           "ORDER BY [Order Details].OrderID", conn, 3   'adOpenStatic = 3

   MyFile.WriteLine("{") 'Start table
   MyFile.WriteLine("\par\par\fs24")

   'Write the table header row (appears at top of table on each page)
   sRTF = "\trowd\trhdr\trgaph30\trleft0\trrh262" & _
          "\cellx2000\cellx7000\cellx9000" & _
          "\pard\intbl\qc\b\i\ul Order ID \ul0\i0\b0\par\cell" & _
          "\pard\intbl\ql\b\i\ul Product \ul0\i0\b0\par\cell" & _
          "\pard\intbl\qr\ul\b\i Amount \ul0\i0\b0\par\cell" & _
          "\pard\intbl\row"
   MyFile.WriteLine(sRTF)

   dim LastID
   dim CurID
   dim CurTotal
   dim bFirstRow

   bFirstRow=true

   do while not (rs.eof)

     if LastID<>rs("ID").Value and not(bFirstRow)  Then

        'Starting on a row for a different id, so add the last total and 
        'then a blank row
        sRTF = "\trowd\trgaph30\trleft0\trrh262" & _
               "\cellx2000\cellx7000\clbrdrb\brdrdb\cellx9000" & _
               "\pard\intbl\cell\pard\intbl\cell\pard\intbl\qr\b " & _
               FormatCurrency(CurTotal, 0, False, False, True) & _
               "\b0\cell\pard\intbl\row" & _
               "\trowd\trgaph30\trleft0\trrh262" & _
               "\cellx2000\cellx7000\cellx9000" & _
               "\pard\intbl\cell\pard\intbl\cell\pard\intbl\cell" & _
               "\pard\intbl\row"
        MyFile.WriteLine(sRTF)

        CurID = rs("ID").Value
        CurTotal = 0
     elseif bFirstRow then
        CurID = rs("ID").Value
     else
        CurID = ""
     end if

     'Add a new row with the ID, the Product name and the amount
     'Note: Amounts over 1000 are formatted with red.
     sRTF = "\trowd\trgaph30\trleft0\trrh262" & _
            "\cellx2000\cellx7000\cellx9000" & _
            "\pard\intbl\qc " & CurID & "\cell" & _
            "\pard\intbl\ql " & rs("Name").Value & "\cell"
     If rs("Amount").Value >1000 Then
        sRTF = sRTF & "\pard\intbl\qr\cf6 " & _
               FormatNumber(rs("Amount").Value, 0, False, False, True) & _
               "\cf0\cell\pard\intbl\row"
     else
        sRTF = sRTF & "\pard\intbl\qr " & _
               FormatNumber(rs("Amount").Value, 0, False, False, True) & _
               "\cell\pard\intbl\row"
     end if

     MyFile.WriteLine(sRTF)

     LastID = rs("ID").Value
     CurTotal = CurTotal + rs("Amount").Value
     rs.MoveNext
     bFirstRow=false

   loop

   MyFile.WriteLine("}") 'End Table

   'Add a page break and then a new paragraph
   MyFile.WriteLine("\par \page")
   MyFile.WriteLine("\pard\fs18\cf2\qc " & _
                    "This sample provided by Microsoft Developer Support.")

   'Close the recordset and database
   rs.Close
   conn.Close
   Set rs = Nothing
   Set conn = Nothing
   
   'close the RTF string and file
   MyFile.WriteLine("}")
   MyFile.Close

   Response.Write _
       "<META HTTP-EQUIV=""REFRESH"" Content=""0;URL=" & sFileName & """>"
 
%>
				

ASP-Beispiel 2

Der folgende ASP-Code stellt eine Simulation eines Word-Seriendrucks oder Serienbriefs dar. Jede Seite des 170-seitigen Dokuments wird aus einem Datensatz in einem ADO-Recordset erstellt.

Hinweis: Die Variable sConn in diesem Codebeispiel enthält den Pfad zu der Nordwind-Datenbank. Vergewissern Sie sich, dass der bereitgestellte Pfad für Ihre Installation von Office korrekt ist. Sie müssen dem Ordner mit dem ASP-Code außerdem Schreib-Zugriff gewähren, damit das Dokument erstellt werden kann. Dieser Zugriff sollte auf bestimmte Benutzer einer Windows NT-Domäne begrenzt bleiben, kann jedoch für anonymen Zugriff auf Jeder angewendet werden.
<%@ Language=VBScript %>
<%
   Dim sRTF, sConn
   sConn = "c:\program files\microsoft office\office\samples\northwind.mdb"

   Response.Buffer = True

   'Create the file for the RTF
   Dim fso, MyFile, sFileName
   Set fso = CreateObject("Scripting.FileSystemObject")
   sFileName = "sample2.doc"
   Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "\" & _
                                   sFileName, True)

   MyFile.WriteLine("{\rtf1")

   'Write the font table
   sRTF = "{\fonttbl {\f0\froman\fcharset0 Times New Roman;}" & _
          "{\f1\fswiss\fcharset0 Arial;}" & _
          "{\f2\fmodern\fcharset0 Courier New;}}"
   MyFile.WriteLine sRTF

   'Write the title and author for the document properties
   MyFile.WriteLine("{\info{\title Sample RTF Document}" & _
                    "{\author Microsoft Developer Support}}")

   'Write the document header and footer
   MyFile.WriteLine("{\header\pard\qc\brdrb\brdrs\brdrw10\brsp100" & _
                    "{\fs50 Northwind Traders} \par}")
   MyFile.WriteLine("{\footer\pard\qc\brdrt\brdrs\brdrw10\brsp100" & _
                    "{\fs18 Questions?\par Call (111)-222-3333, " & _
                    " Monday-Friday between 8:00 am and 5:00 pm} \par}")

   'Connect to the database in read-only mode
   Dim conn, rs
   Set conn = Server.CreateObject("ADODB.Connection")
   conn.Provider = "Microsoft.Jet.OLEDB.4.0"
   conn.Mode = 1    'adModeRead=1
   conn.Open sConn

   'Execute a query that returns ID, Product name and amount of sale
   Set rs = Server.CreateObject("ADODB.Recordset")
   rs.Open "SELECT Orders.ShippedDate, Orders.ShipVia, " & _
           "Orders.OrderDate, Orders.OrderID, " & _
           "Customers.ContactName FROM Customers INNER JOIN Orders ON " & _
           "Customers.CustomerID = " & _
           "Orders.CustomerID WHERE (((Orders.ShippedDate) Between " & _
           "#1/1/1998# And #3/31/98#))",conn,3  'adOpenStatic = 3

   Do While Not (rs.eof)
     
     'Write the "body" of the form letter
    
     MyFile.WriteLine   "\fs26\f1"   'Default font

     MyFile.WriteLine   "\pard"
     MyFile.WriteLine   "\par\par\par\par"
     MyFile.WriteLine   "\par RE: Order #" & rs.Fields("OrderID").Value
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par " & rs.Fields("ContactName").Value & ", "
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par Thank you for your order on " & _
                        rs.Fields("ShippedDate").Value & _
                        ". Your order has been shipped: "
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par"

     MyFile.WriteLine   "\pard \li720 {\f2"
     MyFile.WriteLine   "\par \b Order Number \b0 \tab " & _
                        rs.Fields("OrderID").Value
     MyFile.WriteLine   "\par \b Shipped By \b0 \tab " & _
                        rs.Fields("ShipVia").Value
     MyFile.WriteLine   "\par \b Shipped On \b0 \tab " & _
                        rs.Fields("ShippedDate").Value
     MyFile.WriteLine   "\par}"
    
     MyFile.WriteLine   "\pard"
     MyFile.WriteLine   "\par"
     MyFile.WriteLine   "\par Northwind Traders is committed to " & _
                        "bringing you products of the " & _
                        "highest quality from all over the world. If " & _
                        "at any time you are not completely satisfied " & _
                        "with any of our products, you may " & _
                        "return them to us for a full refund."
     MyFile.WriteLine   "\par"

     MyFile.WriteLine   "\pard {\fs18 \qc \i"
     MyFile.WriteLine   "\par Thank you for choosing Northwind Traders!"
     MyFile.WriteLine   "\par}"

     rs.MoveNext

     'Add a page break and then a new paragraph
     If Not(rs.eof) Then MyFile.WriteLine("\pard \page")

   Loop

   'Close the recordset and database
   rs.Close
   conn.Close
   Set rs = Nothing
   Set conn = Nothing
   
   'close the RTF string and file
   MyFile.WriteLine("}")
   MyFile.Close

   Response.Write _
        "<META HTTP-EQUIV=""REFRESH"" Content=""0;URL=" & sFileName & """>"

%> 
				

Informationsquellen

Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
257757 Was bei der serverseitigen Automatisierung von Office zu beachten ist
193998 Welche zu lesende und Binäre Daten anzeigen in ASP Verfahrensweise
266263 BUG: Word 2000 und Excel 2000 Display ASP Source When, das Mime-Typen auf Stromdaten verwendet
247318 BUG: Word 2000 und Excel 2000 leiten nicht korrekt um, wenn Word 2000 und Excel 2000 Response.Redirect verwenden

Eigenschaften

Artikel-ID: 270906 - Geändert am: Montag, 25. Juni 2007 - Version: 8.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Active Server Pages 4.0
Keywords: 
kbexpertiseinter kbautomation kbfso kbhowto kbprogramming KB270906
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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