




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用COM和ASP創(chuàng)建動(dòng)態(tài)Word文檔大多數(shù)公司由于意識(shí)到無(wú)文檔的工作過程會(huì)成為前進(jìn)的絆腳石,因此都開發(fā)了定義詳細(xì)的文檔程序。每個(gè)公司都為不同的過程定義自己的一套文檔模板,使它們隨時(shí)可被職員使用,用于進(jìn)行購(gòu)買請(qǐng)求或申請(qǐng)度假等。但是,隨著Internet 逐漸為大家熟悉和逐漸普及,越來(lái)越多的功能被移植到“開放空間”,以實(shí)現(xiàn)更好的可視性和更有效的通訊。比如說,一個(gè)人也許要問:“我可以登錄到Internet / Intranet,填寫一張休假申請(qǐng)表,然后以公司標(biāo)準(zhǔn)模板樣式將它作為Word 文檔發(fā)送給我的經(jīng)理嗎?”答案是肯定的,下面會(huì)為你演示如何實(shí)現(xiàn)。關(guān)于這個(gè)應(yīng)用程序我們的應(yīng)用程序有一個(gè)樣本表格,由訪問
2、web 站點(diǎn)的用戶填寫。一旦提交,ASP文件收集其中信息,使用web 服務(wù)器上存放的預(yù)先定義的模板,以其內(nèi)容創(chuàng)建一個(gè)Word 文檔。然后顯示一個(gè)鏈接,允許用戶查看或者下載這個(gè)文檔。我們創(chuàng)建一個(gè)Visual Basic COM 組件(ActiveX DLL, 通過ASP應(yīng)用程序調(diào)用它,給它傳遞必要的參數(shù)。組件從本質(zhì)上是使用Microsoft Word 對(duì)象庫(kù),創(chuàng)建一個(gè)對(duì)將要傳遞參數(shù)的Word 文檔的引用。所有這些都是在服務(wù)器上完成的,因?yàn)檫@種方法有許多優(yōu)勢(shì)。其中最重要的是在程序內(nèi)運(yùn)行的since.dll (與網(wǎng)絡(luò)服務(wù)器在同樣的內(nèi)存中,它們比程序外運(yùn)行的(如CGI或Perl 腳本運(yùn)行更快,使用的資
3、源更少,后者在運(yùn)行中每次被調(diào)用時(shí),都將創(chuàng)建自己本身的實(shí)例(如復(fù)制作為單獨(dú)的程序,因此要用掉大量的服務(wù)器內(nèi)存。這還意味著為了使程序外組件在服務(wù)器上運(yùn)行(關(guān)鍵字:ASPAllowOutOfProcComponents,你不需要修改Metabase (一個(gè)存儲(chǔ)Internet信息服務(wù)器配置設(shè)置的結(jié)構(gòu),與Windows 注冊(cè)相同,但是使用較少的磁盤空間。另一方面,這種方法最明顯的缺點(diǎn)也許是因?yàn)樗c網(wǎng)絡(luò)服務(wù)器在同樣的內(nèi)存空間中運(yùn)行,任何DLL的問題都有可能使服務(wù)器出故障。因此,在開發(fā)和執(zhí)行程序內(nèi)應(yīng)用程序時(shí)需要十分小心。程序要求和優(yōu)點(diǎn)完成本文所說的功能,需要具備以下條件:Visual Basic 5 或6
4、具備IIS 4的NT服務(wù)器或工作站,或者有PWS 的任何Windows 9.xMS Word 97 ( Office 97 套裝的一部分本例還可以和MS Word 2000一起執(zhí)行,但是會(huì)有一些問題,在文章最后要提到。其它額外的軟件是不必要的,只需要保證默認(rèn)站點(diǎn)http:/localhost/ 是有效的(點(diǎn)擊這個(gè)超鏈接會(huì)把你帶到個(gè)人的web 服務(wù)器或Windows NT 的主頁(yè)。我們將把創(chuàng)建的所有文檔都存儲(chǔ)在C:Inetpubscriptsdocuments 文件夾中,所以一旦文檔被創(chuàng)建之后,我們提供到它的鏈接是很容易的(可以根據(jù)需要修改。一定要?jiǎng)?chuàng)建這個(gè)路徑,否則我們的例子就不能工作。所有其它
5、的文件都位于我們的腳本路徑( C:Inetpubscripts 。我們的dll 將盡可能地靈活,使任何模板的修改都只需要最少的代碼修改。更深一層的技術(shù)要設(shè)計(jì)的模板可以基于一個(gè)公司希望在他們的文檔出現(xiàn)的內(nèi)容:登錄、適當(dāng)?shù)捻?yè)眉和頁(yè)腳信息、基本文本等等。另外文檔創(chuàng)建之后,我們希望在其中看到用戶特殊信息的地方還要加入標(biāo)記(這就使這個(gè)應(yīng)用程序是動(dòng)態(tài)的。在我們回顧代碼時(shí)還會(huì)仔細(xì)看這些部分。我們的.dll 將包含一個(gè)稱為GenerateDocument 的函數(shù)(在類文件內(nèi)部,它要求向它傳遞4個(gè)參數(shù),分別是:一個(gè)為所有標(biāo)記用的分界字符串(來(lái)自文本模板一個(gè)為所有相應(yīng)值用的分界字符串(來(lái)自web瀏覽器上用戶填充的
6、表格模板在服務(wù)器上的位置生成的文檔在服務(wù)器上被存儲(chǔ)的位置現(xiàn)在我們可以往下進(jìn)行了。組合在一起文檔模板首先創(chuàng)建一個(gè)word 模板的樣本,假設(shè)它就是我們公司的標(biāo)準(zhǔn)文檔模板。我們要為這個(gè)例子獲取職員的信息,我們希望文檔中包含以下的特定信息:名字、地址、Email Id。現(xiàn)在基于這些信息創(chuàng)建模板,一定要在文檔中將要顯示用戶信息的地方包含適當(dāng)?shù)臉?biāo)記(如. < Name >, < Address >。將文件命名為EmployeeTemplate.dot(記住,在Save As 對(duì)話框的文件類型列表中選擇文檔模板,并將其存入C:InetpubScriptsTemplates??纯纯上螺d
7、材料部分包含的文檔模板樣本,以便對(duì)它有個(gè)更好的理解。COM組件現(xiàn)在用Visual Basic創(chuàng)建COM組件,按照以下的步驟:啟動(dòng)Visual Basic, 選擇ActiveX DLL 作為工程文件類型。將類名改為DocumentObject, 工程文件名改為MyDocumen(這是我們?cè)贏SP頁(yè)中創(chuàng)建COM組件的一個(gè)例示時(shí)要使用的信息接著,點(diǎn)擊工程文件菜單選項(xiàng),到References。向下滾動(dòng)直到看見"Microsoft Word n.0 Object Library " (n 是一個(gè)識(shí)別服務(wù)器上安裝的word對(duì)象庫(kù)版本的數(shù)字.選中這個(gè)選項(xiàng),點(diǎn)擊click OK。請(qǐng)參閱本文
8、結(jié)尾處可下載文件中的類模塊代碼。GenerateDocument(函數(shù)要用到從ASP文件向它傳遞的4個(gè)參數(shù)。它返回一個(gè)字符串類型,在后面可以看到:Option Explicit'' Declare a New word application ObjectDim wdApp As New Word.ApplicationPublic Function GenerateDocument(sTags, sValues, sSourcePath, sDestPath _As StringOn Error GoTo ErrHandlerDim arrTags( As String, a
9、rrValues( As String, iLoop As Integer此函數(shù)執(zhí)行的第一個(gè)任務(wù)是從指定的源路徑(作為參數(shù)從ASP文件傳遞過來(lái)打開模板文件。基于在服務(wù)器上創(chuàng)建的模板,引用一個(gè)新的Word 文檔:然后,將從HTML表單中獲取的所有標(biāo)記,用Split 函數(shù)放入arrTags數(shù)列中。逗號(hào)是一個(gè)分界符,在ASP文件中分隔開標(biāo)記的值:arrTags = Split(sTags, ", "我們將相應(yīng)的用戶輸入值存入arrValues數(shù)列。pipe 字符( | 是分界符,來(lái)分隔開這些值:arrValues = Split(sValues, " | "
10、代碼在arrTags 中循環(huán),用查找和代替操作(用應(yīng)用程序腳本的Visual Basic從標(biāo)記數(shù)列中找到標(biāo)記,在創(chuàng)建的Word文檔中,用arrValues 數(shù)列中的相應(yīng)值代替它們:, , , , , arrValues(iLoop, 2Next iLoop你看到的一串逗號(hào)是Find-Execute 方法的不同屬性,我們沒有設(shè)置。我們只對(duì)MatchWholeWord, Re placeWith和ReplaceAll(用數(shù)字常量2代表的設(shè)置選擇感興趣。然后,我們將文檔存入指定的目的路徑和文件名中,退出和釋放之前關(guān)閉這個(gè)word文檔對(duì)象:wdApp.QuitSet wdApp = Nothing退出
11、函數(shù)之前,返回一個(gè)''Success'' 標(biāo)志:GenerateDocument = "Success"Exit Function這是一個(gè)錯(cuò)誤處理程序。如果在上面的應(yīng)用程序執(zhí)行中遇到錯(cuò)誤的話,它返回一個(gè)錯(cuò)誤信息。ErrHandler:'' Quit and release the word document objectwdApp.QuitSet wdApp = Nothing'' Build the Error Message, and pass it backDim ErrMsg As StringErrM
12、sg = "Error Number: " & Err.Number & "< BR >< BR >"ErrMsg = ErrMsg & "Error Source: " & Err.Source & "< BR >< BR >"ErrMsg = ErrMsg & "Error Description: " & Err.Description & "< BR >&
13、lt; BR >" GenerateDocument = ErrMsgExit FunctionEnd FunctionPrivate Sub Class_Terminate('' Release the referenceSet wdApp = NothingEnd Sub在Visual Basic中,保存應(yīng)用程序(保留類和工程文件名,編譯,看是否產(chǎn)生了什么錯(cuò)誤。然后,打開File 菜單, 點(diǎn)擊Make MyDocument.dll。保留它的名字,在工程文件所在的文件夾中保存它。然后,在web 服務(wù)器上注冊(cè)dll,如下:將MyDocument.dll 復(fù)制到w
14、indowssystem 或winntsyst em32路徑(取決于使用的操作系統(tǒng).在命令提示符下執(zhí)行以下命令C:winntsystem32 >regsvr32 MyDocument.dll你將看到一個(gè)成功的信息:DllRegisterServer in MyDocument.dll 。上面完成了這個(gè)應(yīng)用程序的主要部分?,F(xiàn)在進(jìn)入下一步。HTML 頁(yè)面現(xiàn)在需要?jiǎng)?chuàng)建HTML頁(yè)面( EmployeeForm.html ,用戶將在其中輸入填充到新Word 文檔中的值。下面是我們使用的HTML頁(yè)樣本:< HTML >< TITLE > Employee Registrati
15、on Page < /TITLE >< BODY BGCOLOR=#ECECEC >< CENTER >< FONT FACE=arial SIZE=-1 >< FONT SIZE=5 > Employee Registration Page < /FONT >< HR ALIGN=center COLOR=black >< BR >Please complete your details as per the Registration Form.< BR >< BR >&l
16、t; TABLE CELLSPACING=1 CELLPADDING=5 BGCOLOR="#000000" BORDER=0 ALIGN=center >< FORM ACTION=CustomDoc.asp METHOD=post >< TR > < TD BGCOLOR=#00BCA8 COLSPAN=2 ALIGN=center >< B >< FONT FACE=arial SIZE=-1 COLOR=black > Employee Details< /TD >< /TR >
17、;< TR > < TD BGCOLOR=#C4C2C2 >< B >< FONT FACE=arial SIZE=-1 COLOR=black >Your Name:< /TD >< TD BGCOLOR=#E3E1E1 > < INPUT TYPE=Text NAME="Name" SIZE=20 MAXLENGTH=25 > < / TD >< /TR > < TR > < TD BGCOLOR=#C4C2C2 > < B >
18、< FONT FACE=arial SIZE=-1 COLOR=black >Address: < /TD > < TD BGCOLOR=#E3E1E1 > < INPUT TYPE=Text NAME="Address" SIZE=40 MAXLENGTH=40 > < /TD > < /TR > < TR > < TD BGCOLOR=#C4C2C2 > < B >< FONT FACE=arial SIZE=-1 COLOR=black >City,
19、 State: < /TD > < TD BGCOLOR=#E3E1E1 > < INPUT TYPE=Text NAME="City" SIZE=20 MAXLENGTH=20> < INPUT TYPE=Text NAME="State" SIZE=20 MAXLENGTH=20 > < /TD > < /TR > < TR > < TD BGCOLOR=#C4C2C2 > < B >< FONT FACE=arial SIZE=-1 C
20、OLOR=black >Zip, Country: < /TD > < TD BGCOLOR=#E3E1E1 > < INPUT TYPE=Text NAME="Zip" SIZE=20 MAXLENGTH=20 > < INPUT TYPE=Text NAME="Country" SIZE=20 MAXLENGTH=20 > < /TD > < /TR > < TR > < TD BGCOLOR=#C4C2C2 > < B >< FO
21、NT FACE=arial SIZE=-1 COLOR=black >Email: < /TD > < TD BGCOLOR=#E3E1E1 > < INPUT TYPE=Text NAME="Email" SIZE=40 MAXLENGTH=40> < /TD > < /TR > < TR > < TD BGCOLOR=#00BCA8 COLSPAN=2 > < INPUT TYPE=Submit VALUE="Save and Generate Profile Do
22、cument" > < INPUT TYPE=Reset VALUE="Clear Fields" > < /TD > < /TR > < /FORM > < /TABLE > < /BODY >< /HTML > 將文件存入 C:Inetpubscripts 中,要確定腳本路徑在個(gè)人 Web 服務(wù)器或 IIS 中有讀取并執(zhí)行權(quán)限。 ASP 頁(yè)面 ASP 頁(yè)( CustomDoc.asp 實(shí)際完成以下任務(wù):取得用戶輸入、用 COM 組件創(chuàng)建 Word 文檔、 將它遞交回用戶。
23、下面是帶注釋的代碼: < % Dim sTags, sValues, sDestPath, sSourcePath, resValue '' Get all the User Input values from the Form sName = Request("Name" sAddress = Request("Address" sCity = Request("City" sState = Request("State" sZip = Request("Zip" sCo
24、untry = Request("Country" sEmail = Request("Email" sDate = Now( '' Create a list of all the tags as defined in the Word Template by You sTags = "< Name >, < Address >, < City >, < State >, < Zip >, < Country >, " & _ "
25、;< Email >, < Date >" '' Gather up all the User Input values into one delimited string sValues = sName & " | " & sAddress & " | " & sCity & " | " & sState & _ " | " & sZip & " | " & sCo
26、untry & " | " & sEmail & " | " & sDate 完成之后,需要識(shí)別源文件(Template 和目標(biāo)文件(Document的位置。APPL_PHYSICAL_PATH 返回 CustomDoc.asp 文件所在的路徑。我們將文檔文件夾和文件名附加在一起,這是用戶負(fù)空間的名字。 sSourcePath = Request.ServerVariables("APPL_PHYSICAL_PATH" & _ "Templates" & "
27、EmployeeTemplate.dot" sDestPath = Request.ServerVariables("APPL_PHYSICAL_PATH" & _ "Documents" & Replace(sName, " ","" & ".doc" 現(xiàn)在完成了常見 MyDocument 對(duì)象的例示和調(diào)用 GenerateDocument.doc,在返回值的基礎(chǔ)上進(jìn)行適當(dāng) 的操作。 Set myDocObj = Server.CreateObject(&qu
28、ot;MyDocument.DocumentObject" '' Call the GenerateDocument function while passing the required '' Parameters retValue = myDocObj.GenerateDocument(sTags, sValues, sSourcePath, _ sDestPath '' Take appropriate action based on the returned value If retValue = "Success&q
29、uot; Then Msg = "Successfully generated your Document : " & Replace(sName, _ " ", "" & ".doc" Response.Write("< font face=arial size=-1 color=Green >< br >" & Msg Response.Write("< br >< br >< a href=Docume
30、nts/" & _ Replace(sName, " ","" & ".doc" & " >Here it is!< /a >" Else Response.Write("< font face=arial size=-1 color=Red >< br >" & retValue End If % > 將文件存入 C:Inetpubscripts。就行了。現(xiàn)在在瀏覽器中鍵入 http:/localhost/scripts/EmployeeForm.html,執(zhí)行應(yīng)用程序,輸入所有的域值,點(diǎn)擊 Save and Generate Profile Document。現(xiàn)在可以看到我們的方法是多么有效和美觀了。 對(duì)于 O
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年抗血小板藥項(xiàng)目建議書
- 2025年建筑防水卷材及制品項(xiàng)目建議書
- 企業(yè)臨時(shí)保安合同范本
- 合資合伙協(xié)議合同范本
- 醫(yī)院保安協(xié)議合同范本
- 合同范本 渠道疏浚
- 煤矸石燒結(jié)磚購(gòu)銷合同范本
- 農(nóng)村錯(cuò)車道工程合同范例
- 叉車變賣合同范本
- 幼兒園玩具設(shè)備采購(gòu)合同范本
- 七年級(jí)下冊(cè)第三單元名著導(dǎo)讀《駱駝祥子》公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)(公開課公開課一等獎(jiǎng)創(chuàng)新教案及作業(yè)設(shè)計(jì))
- 2025屆新高考生物精準(zhǔn)復(fù)習(xí)+提高農(nóng)作物產(chǎn)量
- 幾何圖形中求線段線段和面積等最值問題 中考數(shù)學(xué)
- 真太陽(yáng)時(shí)調(diào)整
- TD/T 1037-2013 土地整治重大項(xiàng)目可行性研究報(bào)告編制規(guī)程(正式版)
- 2024年時(shí)政試題庫(kù)(奪分金卷)
- 2024年江蘇農(nóng)林職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案1套
- 工程項(xiàng)目移交方案
- 高級(jí)英語(yǔ)-第一冊(cè)-課后習(xí)題答案
- 《帶電作業(yè)用絕緣工具試驗(yàn)導(dǎo)則》
- 2024年時(shí)事政治熱點(diǎn)題庫(kù)200道附完整答案【必刷】
評(píng)論
0/150
提交評(píng)論