Makalede, ASP komut dosyası, zengin metin biçimi (RTF) dosyaları oluşturur ve sonra bu dosyaları Microsoft Word'e akış nasıl kaldırılacağı anlatılır. Bu teknik, çalıştırma belge oluşturma için Microsoft Word, sunucu tarafında Otomasyon bir alternatif sağlar.
Not Bu makalede, bir kopyasını Northwind.mdb örnek veritabanını Microsoft Access 2000, Microsoft Access 2002 veya Microsoft Office Access 2003 yüklü olmasını gerektirir.
ASP ile Word belgelerini oluşturmak için dezavantajları vardır sunucu tarafında Otomasyon:
- Bir işlem dışı Otomasyon performans Microsoft Word ise sunucu; işlem dışı aramaları alma yürütmek için daha uzun.
- Winword.exe dosyasını sağlamak için Word'ün zengin bir nesne modeli yararları reap yüklenmesi gerekir, çünkü ölçeklenebilirlik farklı bir Otomasyon sunucusu için Microsoft Word önemli ek yük var.
Belgelerinizi sıfırdan ve Word nesne modeli kullanmadan oluşturarak, ASP uygulamanızın daha ölçeklenebilir hale getirebilir ve ayrıca performansı artırmak. Bu yaklaşım,
FileSystemObject yorumlanacak RTF dosyası Microsoft Word'de tarayıcı istemcilerinde oluşturmak için nasıl kullanılacağını gösteren aşağıdaki örneklerde kullanılır.
Ilk örnek ASP üstbilgi ve altbilgileri içeren bir tablo ve belge boyunca metni farklı yazı tipi stilleri ve renkleri kullanan bir RTF belgesi oluşturmak için nasıl kullanılacağını gösterir. Ilk örnek, Northwind Access veritabanını, 90 plus sayfalı bir belgeyi oluşturmak için örnek verilere erişmek için ADO kullanır.
Ikinci örnek bir RTF belgesi Word adres-mektup birleştirme için benzer oluşturulması gösterilmiştir. Sonuç belgesi üstbilgi ve altbilgileri içeren, çeşitli biçimlendirme ve sayfa sonları ve <a2>kullanan farklı bir yazı tipi stilleri</a2> ve <a4>türleri belgenin paragraf. Bu örnek, 170 plus sayfalı bir belgeyi oluşturmak için Northwind veritabanından verilere erişmek için ADO'nı da kullanır.
Not Zengin metin biçimi (RTF) belirtimi, RTF uyumlu metin dosyaları oluşturmak için ortak bir belirtimdir. RTF dosyaları oluşturmanıza yardımcı olmak için aşağıdaki Microsoft Developer Network (MSDN) Web sitesinde bir kaynak olarak belirtimi için belgeleri kullanabilirsiniz. Belirtim ancak sağlanan "olarak-olan", ve Microsoft Teknik Destek'e tarafından supportted değil. RTF belirtimi en son sürümü için aşağıdaki MSDN Web sitesine bakın:
ASP örneği 1
Aşağıdaki ASP 90 plus sayfalı bir RTF oluşturulmasını gösterir raporu hesaplanmış şekiller içeren belge.
Not Bu kod örneğinde
sConn değişken, Northwind veritabanının yolunu içerir. Sağlanan yol, Office yükleme için uygun olduğunu doğrulayın. Ayrıca, ASP, böylece belgeyi oluşturan içeren klasörüne
yazma erişimi sağlamak gerekir. Bu erişim, Windows NT etki alanı altında belirli kişiler için sınırlı olmalıdır;
Everyone grubuna Anonim erişim için uygulanabilir.
<%@ 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 Örnek 2
Aşağıdaki ASP, bir Word adres-mektup birleştirme veya mektup formu bir benzetimi gösterir. Her sayfayı 170 plus sayfalık belge bir ADO kayıt kümesindeki bir kaydı oluşturulur.
Not Bu kod örneğinde
sConn değişken, Northwind veritabanının yolunu içerir. Sağlanan yol, Office yükleme için uygun olduğunu doğrulayın. Ayrıca; bu nedenle, belgeyi oluşturan ASP içeren klasörüne
yazma erişimi sağlamanız gerekir. Bu erişim, bir NT altında belirli kişiler için sınırlı olmalıdır etki alanı, ancak
Everyone grubuna Anonim erişim için uygulanabilir.
<%@ 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 & """>"
%>
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
257757
(http://support.microsoft.com/kb/257757/
)
Sunucu tarafında Office Otomasyonu ile ilgili konular
193998
(http://support.microsoft.com/kb/193998/
)
ASP'de ikili dosya verileri nasıl okunur ve görüntülenir (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)
266263
(http://support.microsoft.com/kb/266263/
)
Hata: Word 2000 ve Excel 2000 ASP kaynağını akış verileri için MIME türü kullanılırken görüntülemek
247318
(http://support.microsoft.com/kb/247318/
)
Hata: Word 2000 ve Excel 2000 doğru Response.Redirect kullanırken yönlendirmeyin