Artikel ini menjelaskan bagaimana Anda dapat menghasilkan Rich Text
File format (RTF) dengan ASP script dan kemudian streaming file-file ke Microsoft
Kata. Teknik ini menyediakan alternatif untuk sisi server Otomatisasi
Microsoft Word untuk dokumen run-time generasi.
Catatan Artikel ini memerlukan bahwa Anda memiliki salinan dari database contoh Northwind.mdb diinstal dari Microsoft Access 2000, dari Microsoft Access 2002, atau dari Microsoft Office Access 2003.
Ada kekurangan untuk menghasilkan dokumen Word dengan ASP
sisi server Otomatisasi:
- Kinerja Microsoft Word adalah keluar-Otomasi
Server; panggilan keluar dari proses memakan waktu lebih lama untuk mengeksekusi.
- Skalabilitas sebagai otomatisasi server, Microsoft Word memiliki
substansial atas karena Winword.exe file harus diambil dalam rangka untuk
Anda untuk menuai keuntungan dari kata kaya object model.
Dengan menghasilkan dokumen Anda dari awal dan tanpa menggunakan
Kata object model, Anda dapat membuat aplikasi ASP Anda lebih scaleable dan
juga meningkatkan kinerja. Pendekatan ini digunakan dalam berikut sampel yang
menunjukkan bagaimana untuk menggunakan
FileSystemObject untuk membuat berkas RTF yang dapat ditafsirkan dalam Microsoft Word
pada browser klien.
Contoh pertama menunjukkan cara menggunakan ASP untuk membuat
RTF dokumen yang berisi header dan footer, berisi meja, dan menggunakan
font yang berbeda gaya dan warna untuk teks di seluruh dokumen. Pertama
contoh menggunakan ADO untuk mengakses data dari Northwind akses sampel database untuk
membuat dokumen 90 plus halaman.
Contoh kedua menunjukkan bagaimana
untuk membuat dokumen RTF mirip dengan gabungan surat Word. Hasil
dokumen berisi header dan footer, berbagai format paragraf dan halaman
istirahat, dan menggunakan font yang berbeda gaya dan jenis melalui dokumen. Ini
contoh juga menggunakan ADO untuk mengakses data dari Northwind database untuk membuat
170 plus halaman dokumen.
Catatan Rich Text Format (RTF) spesifikasi adalah publik
spesifikasi untuk menghasilkan kompatibel RTF file teks. Anda dapat menggunakan
dokumentasi untuk spesifikasi pada Pengembang Microsoft berikut
Situs Web Network (MSDN) sebagai sumber daya untuk membantu Anda membangun Anda sendiri RTF file.
Namun, spesifikasi disediakan "sebagai-adalah", dan tidak supportted oleh
Dukungan teknis Microsoft. Untuk versi terbaru dari spesifikasi RTF,
Lihat situs Website MSDN berikut:
ASP sampel 1
ASP berikut menunjukkan penciptaan RTF 90 plus halaman
dokumen yang berisi laporan dari angka-angka yang dihitung.
Catatan Variabel
sConn dalam kode ini sampel berisi path ke Northwind database.
Mengkonfirmasi bahwa jalan yang diberikan tepat untuk instalasi Office.
Anda juga harus memberikan
Menulis akses ke folder yang berisi ASP sehingga dokumen dapat
dibuat. Akses ini harus dibatasi untuk individu tertentu di bawah
Windows NT domain, tetapi dapat diterapkan untuk
Semua orang untuk akses anonim.
<%@ 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 sampel 2
ASP berikut menunjukkan simulasi gabungan surat Word
atau surat formulir. Setiap halaman di 170 plus halaman dokumen yang dihasilkan dari
merekam dalam recordset ADO.
Catatan Variabel
sConn dalam kode ini sampel berisi path ke Northwind database.
Mengkonfirmasi bahwa jalan yang diberikan tepat untuk instalasi Office.
Anda juga harus memberikan
Menulis akses ke folder yang berisi ASP sehingga dokumen dapat
dibuat. Akses ini harus dibatasi untuk individu tertentu di bawah NT
domain, tetapi dapat diterapkan untuk
Semua orang untuk akses anonim.
<%@ 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 & """>"
%>
Untuk informasi selengkapnya, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
257757
(http://support.microsoft.com/kb/257757/
)
Pertimbangan untuk otomatisasi Office sisi server
193998
(http://support.microsoft.com/kb/193998/
)
Bagaimana untuk membaca dan menampilkan data biner di ASP
266263
(http://support.microsoft.com/kb/266263/
)
BUG: Word 2000 dan Excel 2000 menampilkan ASP sumber ketika menggunakan jenis MIME aliran data
247318
(http://support.microsoft.com/kb/247318/
)
BUG: Word 2000 dan Excel 2000 tidak mengalihkan dengan benar ketika menggunakan Response.Redirect