In dit artikel wordt beschreven hoe u Rich Text Format-bestanden (RTF) kunt genereren met ASP-script en deze kunt verzenden naar Microsoft Word. Deze techniek biedt een alternatief voor de Microsoft Word-automatiseringsmethode op servers waarbij documenten in runtime worden gemaakt.
Er zijn nadelen verbonden aan het genereren van Word-documenten met ASP-automatisering op servers:
- Performance Microsoft Word is een out-of-process-automatiseringsserver; out-of-process-oproepen duren langer om uit te voeren.
- Schaalbaarheid als automatiseringsserver, Microsoft Word heeft heel wat overhead omdat het bestand Winword.exe moet worden geladen om voordeel te kunnen halen uit het krachtige Word-objectmodel.
Door geheel nieuwe documenten te genereren zonder het Word-objectmodel te gebruiken, kunt u uw ASP-toepassing meer schaalbaar maken en de prestaties verbeteren. Deze benadering wordt gebruikt in de volgende voorbeelden die aantonen hoe het
FileSystemObject moet worden gebruikt om een RTF-bestand te maken dat kan worden geïnterpreteerd in Microsoft Word op het niveau van browserclient.
In het eerste voorbeeld ziet u hoe u ASP kunt gebruiken voor het maken van een RTF-document dat een kop- en voettekst en een tabel bevat en dat overal verschillende tekenstijlen en tekstkleuren gebruikt. In het eerste voorbeeld wordt ADO gebruikt om toegang te krijgen tot gegevens uit de voorbeelddatabase Noordenwind van Access om een document van meer dan 90 pagina's te maken.
In het tweede voorbeeld ziet u hoe u een RTF-document maakt op dezelfde manier als bij een Word-samenvoegbewerking. Het aldus verkregen document bevat kop- en voettekst, verschillende vormen van alineaopmaak en pagina-einden, en overal worden er verschillende tekenstijlen en lettertypen gebruikt. In dit voorbeeld wordt bovendien ADO gebruikt om toegang te krijgen tot gegevens uit de database Noordenwind om een document van meer dan 170 pagina's te maken.
Opmerking De Rich Text Format-specificatie (RTF) is een openbare specificatie voor het genereren van RTF-compatibele tekstbestanden. De documentatie voor de specificatie die u terugvindt op de hieronder vermelde MSDN-website (Microsoft Developer Network), kunt u gebruiken als hulpmiddel bij het maken van uw eigen RTF-bestanden. De specificatie wordt echter als zodanig aangeboden en wordt niet ondersteund door Microsoft Technical Support. Zie de hieronder vermelde MSDN-website voor de meest recente versie van de RTF-specificatie:
ASP Voorbeeld 1
De volgende ASP-code geeft aan hoe u een RTF-document maakt van meer dan 90 pagina's dat een cijferrapport bevat.
Opmerking De variabele
sConn in deze voorbeeldcode bevat het pad naar de database Noordenwind. Controleer of het opgegeven pad geschikt is voor uw geïnstalleerde versie van Office. U moet ook
Schrijftoegang verlenen voor de map waarin de ASP-code zich bevindt, zodat het document kan worden gemaakt. Deze toegang moet beperkt blijven tot een aantal specifieke gebruikers onder een Windows NT-domein, maar anonieme toegang kan voor
Iedereen worden verleend.
<%@ Language=VBScript %>
<%
Dim sRTF, sFileName, sConn
sConn = "c:\program files\microsoft office\office\samples\northwind.mdb"
Response.Buffer = True
'Maak het bestand voor de RTF
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
sFileName = "sample1.doc"
Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "\" & _
sFileName, True)
MyFile.WriteLine("{\rtf1")
'Schrijf de kleurentabel (voor achtergrond- en voorgrondkleuren)
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)
'Schrijf de titel en auteur voor de eigenschappen van het document
MyFile.WriteLine("{\info{\title Sample RTF Document}" & _
"{\author Microsoft Developer Support}}")
'Schrijf de koptekst en voettekst van de pagina
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}")
'Schrijf een zin in de eerste alinea van het document
MyFile.WriteLine("\par\fs24\cf2 Dit is een voorbeeld \b RTF \b0 " & _
"document gemaakt met ASP.\cf0")
'Maak verbinding met de database in de modus Alleen-lezen
Dim conn, rs
Set conn = Server.CreateObject("ADODB.Connection")
conn.Provider = "Microsoft.Jet.OLEDB.4.0"
conn.Mode = 1 'adModeRead=1
conn.Open sConn
'Voer een query uit die IDs, productnamen en verkoopbedragen retourneert
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")
'Schrijf de koptekst van de tabel (bovenste rij van de tabel op elke pagina)
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
'Start op een rij voor een andere id, voeg dus het laatste totaal toe en
'vervolgens een lege rij
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
'Voeg een rij met de ID, de productnaam en het bedrag toe
'Opmerking: Bedragen van meer dan 1000 worden met rood opgemaakt.
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
'Voeg een pagina-einde en vervolgens een nieuwe alinea toe
MyFile.WriteLine("\par \page")
MyFile.WriteLine("\pard\fs18\cf2\qc " & _
"Dit voorbeeld werd verstrekt door Microsoft Developer Support.")
'Sluit de recordset en database
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
'Sluit de RTF-tekenreeks en het RTF-bestand
MyFile.WriteLine("}")
MyFile.Close
Response.Write _
"<META HTTP-EQUIV=""REFRESH"" Content=""0;URL=" & sFileName & """>"
%>
ASP Voorbeeld 2
In de volgende ASP-code ziet u een simulatie van een samenvoegbewerking of standaardbrief in Word. Elke pagina van het document van meer dan 170 pagina's wordt gegenereerd op basis van een record in een ADO-recordset.
Opmerking De variabele
sConn in deze voorbeeldcode bevat het pad naar de database Noordenwind. Controleer of het opgegeven pad geschikt is voor uw geïnstalleerde versie van Office. U moet ook
Schrijftoegang verlenen voor de map waarin de ASP-code zich bevindt, zodat het document kan worden gemaakt. Deze toegang moet beperkt blijven tot een aantal specifieke gebruikers onder een Windows NT-domein, maar anonieme toegang kan voor
Iedereen worden verleend.
<%@ Language=VBScript %>
<%
Dim sRTF, sConn
sConn = "c:\program files\microsoft office\office\samples\northwind.mdb"
Response.Buffer = True
'Maak het bestand voor de RTF
Dim fso, MyFile, sFileName
Set fso = CreateObject("Scripting.FileSystemObject")
sFileName = "sample2.doc"
Set MyFile = fso.CreateTextFile(Server.MapPath(".") & "\" & _
sFileName, True)
MyFile.WriteLine("{\rtf1")
'Schrijf de tabel met lettertypen
sRTF = "{\fonttbl {\f0\froman\fcharset0 Times New Roman;}" & _
"{\f1\fswiss\fcharset0 Arial;}" & _
"{\f2\fmodern\fcharset0 Courier New;}}"
MyFile.WriteLine sRTF
'Schrijf de titel en auteur voor de eigenschappen van het document
MyFile.WriteLine("{\info{\title Sample RTF Document}" & _
"{\author Microsoft Developer Support}}")
'Schrijf de koptekst en voettekst van het document
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, " & _
" Maandag-vrijdag van 08.00 tot 17.00 uur} \par}")
'Maak een verbinding met de database in de modus Alleen-lezen
Dim conn, rs
Set conn = Server.CreateObject("ADODB.Connection")
conn.Provider = "Microsoft.Jet.OLEDB.4.0"
conn.Mode = 1 'adModeRead=1
conn.Open sConn
'Voer een query uit die IDs, productnamen en verkoopbedragen retourneert
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)
'Schrijf de "hoofdtekst" van de standaardbrief
MyFile.WriteLine "\fs26\f1" 'Standaardlettertype
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 Bedankt voor uw bestelling op " & _
rs.Fields("ShippedDate").Value & _
". Uw bestelling werd verzonden: "
MyFile.WriteLine "\par"
MyFile.WriteLine "\par"
MyFile.WriteLine "\pard \li720 {\f2"
MyFile.WriteLine "\par \b Bestelnummer \b0 \tab " & _
rs.Fields("OrderID").Value
MyFile.WriteLine "\par \b Verzonden door \b0 \tab " & _
rs.Fields("ShipVia").Value
MyFile.WriteLine "\par \b Verzonden op \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
'Voeg een pagina-einde en vervolgens een nieuwe alinea toe
If Not(rs.eof) Then MyFile.WriteLine("\pard \page")
Loop
'Sluit de recordset en database
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
'Sluit de RTF-tekenreeks en het RTF-bestand
MyFile.WriteLine("}")
MyFile.Close
Response.Write _
"<META HTTP-EQUIV=""REFRESH"" Content=""0;URL=" & sFileName & """>"
%>
Voor meer informatie klikt u op de volgende artikelnummers in de Microsoft Knowledge Base:
257757
(http://support.microsoft.com/kb/257757/
)
INFO: Overwegingen bij de automatisering van Office op servers
193998
(http://support.microsoft.com/kb/193998/
)
Binaire gegevens in ASP lezen en weergeven
266263
(http://support.microsoft.com/kb/266263/
)
BUG: In Word 2000 en Excel 2000 wordt de ASP-bron weergegeven bij gebruik van MIME-type om gegevens af te spelen
247318
(http://support.microsoft.com/kb/247318/
)
BUG: Word 2000 en Excel 2000 sturen niet correct door bij gebruik van Response.Redirect
Artikel ID: 270906 - Laatste beoordeling: vrijdag 18 augustus 2006 - Wijziging: 7.0
De informatie in dit artikel is van toepassing op:
- Microsoft Office Word 2003
- Microsoft Word 2000 Standard Edition
- Microsoft Word 97 Standard Edition
- Microsoft Active Server Pages 4.0
| kbautomation kbfso kbhowto kbprogramming KB270906 |