用ASP創(chuàng)建Microsoft Word 文件
發(fā)表時間:2024-06-14 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]隨著人們對數(shù)據(jù)庫及動態(tài)HTML (DHTML)的應用和對XML的興趣的增加,所以在商業(yè)網(wǎng)站的數(shù)據(jù)中使用動態(tài)內(nèi)容變得越來越普遍。這里我們就成功運用了一則最新的技巧——用ASP創(chuàng)建 Word 文件,我想您看后肯定會受到很大的啟發(fā)。 原文出處:http://www.asptoday.com/articl...
隨著人們對數(shù)據(jù)庫及動態(tài)HTML (DHTML)的應用和對XML的興趣的增加,所以在商業(yè)網(wǎng)站的數(shù)據(jù)中使用動態(tài)內(nèi)容變得越來越普遍。這里我們就成功運用了一則最新的技巧——用ASP創(chuàng)建 Word 文件,我想您看后肯定會受到很大的啟發(fā)。
原文出處:http://www.asptoday.com/articles/19990825.htm
背景
BuildDoc.asp是一個ASP文件,它讀入一個網(wǎng)頁表單的輸出,并創(chuàng)建一個Microsoft Word文件作為輸出, 其中包含根據(jù)表單內(nèi)數(shù)據(jù)改變產(chǎn)生的一個表格。表單內(nèi)容不再局限于靜態(tài)信息。也就是說, 表單中所顯示的內(nèi)容可能隨著用戶的交互作用而改變。
BuildDoc所滿足的商業(yè)需求是:根據(jù)銷售人員網(wǎng)頁列表變化的記錄,建立表單信件。只有被銷售人員修改過的數(shù)據(jù)才被發(fā)送到Word, 在那里這些數(shù)據(jù)被格式化到表格中。
BuildDoc讀入表單上的所有信息,識別被改變的行,然后用被改變的行中包含的信息來創(chuàng)建一個 Microsoft Word文件。BuildDoc使用一個模板文件(buildDoc.dot),其中包含地址頭和一些預先格式化的文本。然后向文件中寫入一個表格,其中的每一行都對應與網(wǎng)頁表單中被修改過的一行。
怎么做?
開始時,將所有的網(wǎng)頁表單域讀入接收網(wǎng)頁的隱含表單域中。在下面的源代碼中,請注意在Body標記中對“onLoad”的調(diào)用。它調(diào)用buildDoc VB腳本子程序,向它傳遞3個參數(shù):頁面中表單的內(nèi)容(所有的隱含域)、Word模板文件的位置、從輸入表單中收到的行數(shù)。讀所有的輸入表單域,然后當頁面裝載后調(diào)用buildDoc子程序。為了簡短起見,這里假定所有變量在使用之前都已被聲明:
buildDoc.asp中裝載輸入表單域的代碼如下:
〈!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 3.2 Final//EN">
〈HEAD>
〈TITLE>Build Document〈/TITLE>
〈META HTTP-EQUIV="Refresh" CONTENT="30;URL='orderForm.asp'">
〈/HEAD>
〈%
dotLocation="'servernamedirectory heTemplate.dot'"
intRowCount = Request.Form("rowCount") 'initialize a row counter
%>
〈BODY Language="VBScript" onLoad="buildDoc document.theForm,
〈%=dotLocation%>,intRowCount>
〈FORM NAME="theForm">
〈%
itemCount = 0 'set field counter to zero
For Each Item in Request.Form 'count up the form fields
itemCount = itemCount + 1 'using For..Next loop
%>
〈INPUT TYPE="hidden" NAME="〈%=Item%>" VALUE="〈%=Request(Item)%>">
〈% Next %>
〈INPUT TYPE="hidden" NAME="numbRows" VALUE="〈%=intRowCount%>">
〈INPUT TYPE="hidden" NAME="fieldCount" VALUE="〈%=itemCount%>">
〈/FORM>
〈/BODY>
〈/HTML>
用下面例子中的代碼來創(chuàng)建一個Word 文件對象。請注意在Internet Explorer 4+中,要將瀏覽器的安全性設置為Low或 Custom,以能使應用程序運行成功。
〈%
Set objWordDoc = CreateObject("Word.Document")
ObjWordDoc.Application.Documents.Add theTemplate, False
ObjWordDoc.Application.Visible=True
%>
調(diào)整數(shù)組的維數(shù)使它與網(wǎng)頁表單所包含的行數(shù)相同。這時,將Y軸設為4個常量,這是輸出文件中所需要 的欄數(shù)。X軸包含從表單中接收的行數(shù)。
〈% Redim Preserve theArray(4,intTableRows) %>
現(xiàn)在開始檢查所有的表單行。在所有輸入的網(wǎng)頁表單域中循環(huán),收集每個表單域名及其相應的值。逐個檢查以決定將其放入哪個數(shù)列元素內(nèi),然后將其放入。以下舉例代碼中的SELECT CASE命令很重要,這決定表單域?qū)儆谀囊涣。為了方便,使用不確定編碼的CASE選擇。
〈%
For intCount = 0 to frmData.fieldCount.value
strOkay = "Y"
strSearch = frmData.elements(intCount).name 'load the field name
strValue = frmData.elements(intCount).value 'load the field value
strPosition = Instr(1,strSearch,"_") 'get pos val of "_"
intStringLen=strPosition-1
If intStrLen > 0 Then
strLeft = Left(strSearch,intStringLen)
strRight = Right(strSearch,(Len(strSearch)-Len(strLeft)-1))
Select Case strLeft
Case "SKU" intArrayY=0
Case "description" intArrayY=1
Case "price" intArrayY=2
Case "quantity" intArrayY=3
End Select
IntArrayX = strRight
If strOkay 〈> "N" Then
TheArray(intArrayY, intArrayX) = strValue
End If
End If
Next
%>
現(xiàn)在開始創(chuàng)建文件。對于激活的文件,用變量rngCurrent設置Microsoft Word文件對象RANGE(為了防止用戶打開另一個文件),通過指定表格的位置( rngCurrent)以及行、列的數(shù)目來確定其大小。
〈%
Set rngCurrent = objWordDoc.Application.ActiveDocument.Content
Set tabCurrent = ObjWordDoc.Application.ActiveDocument.Tables.Add
rngCurrent,intNumrows,4)
%>
創(chuàng)建了有表格的文件之后,我們開始往表格中裝入數(shù)據(jù)。首先指到第一行row(tabRow=1 ), 然后進行逐行循環(huán)。在每行結(jié)尾處插入回車[Chr(10)],以便產(chǎn)生行間空行,最后增加行計數(shù)器,用“FormatCurrency” 輸出美圓值以保證使用$符號、逗號、小數(shù)點的位置。通過在
“ParagraphAlignment=2”處設置欄數(shù)來實現(xiàn)美圓數(shù)量的正確調(diào)整。用VBA容易一些,不象用VBScript那樣難。
〈%
For j = 1 to intTableRows
ObjWordDoc.Application.ActiveDocument.Tables(1).Rows(tabRow).Borders.Enable=False
objWordDoc.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(1).Range.InsertAfter
theArray(1,j)
objWordDoc.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(2).Range.InsertAfter
theArray(2,j)
objWordDoc.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(3).Range.InsertAfter
FormatCurrency(theArray(3,j))
objWordDoc.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(4).Range.InsertAfter
theArray(4,j)
objWordDoc.Application.ActiveDocument.Tables(1).Rows(tabRow).Cells(4).Range.InsertAfter
Chr(10)
objWordDoc.Applicatoin.ActiveDocument.Tables(1).Rows(tabRow).Cells(3).
Range.ParagraphFormat.alignment=2
tabRow = tabRow + 1
Next
%>
最后用一些收尾性的文字來結(jié)束文件,指定模板位置,然后結(jié)束子程序。
〈%
objWordDoc.Application.ActiveDocument.Paragraph.Add.Range.
InsertAfter("Thank you for shopping at Acme Co., and please come again!")
objWordDoc.Application.ActiveDocument.Paragraph.Add.Range.InsertAfter(" ")
objWordDoc.Application.ActiveDocument.Paragraph.Add.Range.InsertAfter(" ")
objWordDoc.Application.ActiveDocument.Paragraph.Add.Range.InsertAfter("Regards,")
objWordDoc.Application.ActiveDocument.Paragraph.Add.Range.InsertAfter(" ")
objWordDoc.Application.ActiveDocument.Paragraph.Add.Range.
InsertAfter("Daryl B. Morticum")
objWordDoc.Application.ActiveDocument.Paragraph.Add.Range.
InsertAfter("Sales Associate")
End Sub
%>
希望對你做相同的工作能有一些幫助。我可以肯定需要從網(wǎng)頁表單中創(chuàng)建文件的不止我自己。 這是我的方法。如果你有更好的方法,我很愿意學習。
(出處:熱點網(wǎng)絡)