用COM和ASP创建动态Word文档(转)

word|创建|动态

  大多数公司由于意识到无文档的工作过程会成为前进的绊脚石,因此都开发了定义详细的文档程序。每个公司都为不同的过程定义自己的一套文档模板,使它们随时可被职员使用,用于进行购买请求或申请度假等。
  但是,随着Internet 逐渐为大家熟悉和逐渐普及,越来越多的功能被移植到“开放空间”,以实现更好的可视性和更有效的通讯。比如说,一个人也许要问:“我可以登录到Internet / Intranet,填写一张休假申请表,然后以公司标准模板样式将它作为Word 文档发送给我的经理吗?”答案是肯定的,下面会为你演示如何实现。

关于这个应用程序
  我们的应用程序有一个样本表格,由访问web 站点的用户填写。一旦提交,ASP文件收集其中信息,使用web 服务器上存放的预先定义的模板,以其内容创建一个Word 文档。然后显示一个链接,允许用户查看或者下载这个文档。

  我们创建一个Visual Basic COM 组件(ActiveX DLL), 通过ASP应用程序调用它,给它传递必要的参数。组件从本质上是使用Microsoft Word 对象库,创建一个对将要传递参数的 Word 文档的引用。所有这些都是在服务器上完成的,因为这种方法有许多优势。

  其中最重要的是在程序内运行的since.dll (与网络服务器在同样的内存中),它们比程序外运行的(如CGI或Perl 脚本)运行更快,使用的资源更少,后者在运行中每次被调用时,都将创建自己本身的实例(如复制)作为单独的程序,因此要用掉大量的服务器内存。这还意味着为了使程序外组件在服务器上运行(关键字:ASPAllowOutOfProcComponents),你不需要修改Metabase (一个存储Internet信息服务器配置设置的结构,与Windows 注册相同,但是使用较少的磁盘空间)。

  另一方面,这种方法最明显的缺点也许是因为它与网络服务器在同样的内存空间中运行,任何DLL的问题都有可能使服务器出故障。因此,在开发和执行程序内应用程序时需要十分小心。

程序要求和优点

完成本文所说的功能,需要具备以下条件:
● Visual Basic 5 或 6
● 具备IIS 4的NT服务器 或 工作站,或者有PWS 的任何 Windows 9.x
● MS Word 97 ( Office 97 套装的一部分)

  本例还可以和MS Word 2000一起执行,但是会有一些问题,在文章最后要提到。其它额外的软件是不必要的,只需要保证默认站点http://localhost/ 是有效的(点击这个超链接会把你带到个人的web 服务器或Windows NT 的主页)。
  我们将把创建的所有文档都存储在C:\Inetpub\scripts\documents 文件夹中, 所以一旦文档被创建之后,我们提供到它的链接是很容易的(可以根据需要修改)。一定要创建这个路径,否则我们的例子就不能工作。所有其它的文件都位于我们的脚本路径 ( C:\Inetpub\scripts )。我们的dll 将尽可能地灵活,使任何模板的修改都只需要最少的代码修改。

更深一层的技术

  要设计的模板可以基于一个公司希望在他们的文档出现的内容:登录、适当的页眉和页脚信息、基本文本等等。另外文档创建之后,我们希望在其中看到用户特殊信息的地方还要加入标记(这就使这个应用程序是动态的)。在我们回顾代码时还会仔细看这些部分。我们的.dll 将包含一个称为GenerateDocument 的函数(在类文件内部),它要求向它传递4个参数,分别是:
● 一个为所有标记用的分界字符串(来自文本模板)
● 一个为所有相应值用的分界字符串(来自 web浏览器上用户填充的表格)
● 模板在服务器上的位置
● 生成的文档在服务器上被存储的位置

现在我们可以往下进行了。

组合在一起
文档模板
  首先创建一个word 模板的样本,假设它就是我们公司的标准文档模板。我们要为这个例子获取职员的信息,我们希望文档中包含以下的特定信息:名字、地址、Email Id。现在基于这些信息创建模板,一定要在文档中将要显示用户信息的地方包含适当的标记(如. < Name >, < Address >)。

  将文件命名为EmployeeTemplate.dot(记住,在Save As 对话框的文件类型列表中选择文档模板,并将其存入C:\Inetpub\Scripts\Templates\。看看可下载材料部分包含的文档模板样本,以便对它有个更好的理解。

COM组件
  现在用Visual Basic创建COM组件,按照以下的步骤:
● 启动 Visual Basic, 选择 ActiveX DLL 作为工程文件类型。
● 将类名改为DocumentObject, 工程文件名改为 MyDocumen(这是我们在ASP页中创建COM组件的一个例示时要使用的信息)
● 接着,点击工程文件菜单选项,到 References。
● 向下滚动直到看见 "Microsoft Word n.0 Object Library " (n 是一个识别服务器上安装的word对象库版本的数字).选中这个选项,点击click OK。

  请参阅本文结尾处可下载文件中的类模块代码。GenerateDocument()函数要用到从ASP文件向它传递的4个参数。
它返回一个字符串类型,在后面可以看到:
Option Explicit
' Declare a New word application Object
Dim wdApp As New Word.Application
Public Function GenerateDocument(sTags, sValues, sSourcePath, sDestPath) _
As String
On Error GoTo ErrHandler
Dim arrTags() As String, arrValues() As String, iLoop As Integer

  此函数执行的第一个任务是从指定的源路径(作为参数从ASP文件传递过来)打开模板文件。基于在服务器上创建的模板,引用一个新的Word 文档:
wdApp.Documents.Open sSourcePath

  然后,将从HTML表单中获取的所有标记,用Split 函数放入arrTags数列中。逗号是一个分界符,在ASP文件中分隔开标记的值:
arrTags = Split(sTags, ", ")

  我们将相应的用户输入值存入arrValues数列。pipe 字符( | ) 是分界符,来分隔开这些值:arrValues = Split(sValues, " | ") 代码在arrTags 中循环 ,用查找和代替操作(用应用程序脚本的Visual Basic)从标记数列中找到标记,在创建的Word文档中,用arrValues 数列中的相应值代替它们:

For iLoop = 0 To UBound(arrTags) wdApp.ActiveDocument.Content.Find.Execute arrTags(iLoop), , True, , _
, , , , , arrValues(iLoop), 2
Next iLoop

  你看到的一串逗号是Find-Execute 方法的不同属性,我们没有设置。我们只对 MatchWholeWord, ReplaceWith和ReplaceAll(用数字常量2代表)的设置选择感兴趣。然后,我们将文档存入指定的目的路径和文件名中,退出和释放之前关闭这个word文档对象:

wdApp.ActiveDocument.SaveAs sDestPath
wdApp.ActiveDocument.Close
wdApp.Quit
Set wdApp = Nothing
退出函数之前,返回一个'Success' 标志:
GenerateDocument = "Success"
Exit Function
这是一个错误处理程序。如果在上面的应用程序执行中遇到错误的话,它返回一个错误信息。
ErrHandler:
' Quit and release the word document object
wdApp.Quit
Set wdApp = Nothing
' Build the Error Message, and pass it back
Dim ErrMsg As String
ErrMsg = "Error Number: " & Err.Number & "< BR >< BR >"
ErrMsg = ErrMsg & "Error Source: " & Err.Source & "< BR >< BR >"
ErrMsg = ErrMsg & "Error Description: " & Err.Description & "< BR >< BR >"
GenerateDocument = ErrMsg
Exit Function
End Function
Private Sub Class_Terminate()
' Release the reference
Set wdApp = Nothing
End Sub

  在Visual Basic中,保存应用程序(保留类和工程文件名),编译,看是否产生了什么错误。然后,打开File 菜单, 点击Make MyDocument.dll。保留它的名字,在工程文件所在的文件夹中保存它。

  然后,在web 服务器上注册dll,如下: ● 将 MyDocument.dll 复制到windows\system 或 winnt\system32路径(取决于使用的操作系统).
● 在命令提示符下执行以下命令 C:\winnt\s

时间: 2024-10-29 16:18:26

用COM和ASP创建动态Word文档(转)的相关文章

asp.net实现word文档在线预览功能的方法_实用技巧

本文实例讲述了asp.net实现word文档在线预览功能的方法.分享给大家供大家参考.具体实现方法如下: 实现方式:office文档转html,再在浏览器里面在线浏览 1.首先引入com组件中office库,然后在程序集扩展中引入word的dll 2.将Microsoft.Office.Interop.Word的嵌入互操作类型设置为 false,如图 3.主要代码: 复制代码 代码如下: using System; using System.Collections.Generic; using

创建新word文档五大方法

  方法1:传统的程序打开法 在桌面点击"word"图标,打开word程序. 文档五大方法-修改word文档创建时间"> 点击"空白文档",就可以建立新的空白文档了. 这时候就可以编辑文档了. 方法2:直接新建法(右键法) 在桌面空白的地方点击右键,这时候指着"新建",在出现的菜单栏点击"新建microsoft word文档". 这时候会在桌面生成一个word空白文档,你输入想命名的名称. 然后双击左键,就可以

asp.net读取Word文档属性方法

'对自定义属性进行读取  代码如下 复制代码          Dim Properties = SourceDoc.CustomDocumentProperties             Dim PropertyType As Type = Properties.GetType         Try             Dim Authorprop = PropertyType.InvokeMember("Item", Reflection.BindingFlags.Defa

ASP.NET实现word文档在线预览功能代码_基础应用

于是考虑在每个文件上传时为其生存一份HTMl文件,这样就能实现在线预览功能.主要代码如下 复制代码 代码如下: using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using S

ASP.NET实现word文档在线预览功能代码

using system; using system.collections; using system.configuration; using system.data; using system.web; using system.web.security; using system.web.ui; using system.web.ui.htmlcontrols; using system.web.ui.webcontrols; using system.web.ui.webcontrol

在ASP.NET中使用Microsoft Word文档

asp.net|microsoft|word 本文是应在ASP.NET里创建Microsoft Word文档之需而写的.这篇文章演示了在ASP.NET里怎么创建和修改Microsoft Word文档. [背景] 自动化是一种能让各种语言编写的(如:Visual Basic.NET或C#)应用程序在程序级别上控制其他应用程序. 对于Word的自动化允许你执行诸如创建新的文档,向文档里添加文本,邮件合并和格式化文档这些操作.在Word和其他的Microsoft Office程序里,那些通过用户接口进

解决win7无法创建word文档的问题

1.如下所示我们要进入系统的注册表了,按下win+R然后在弹出运行框输入 regedit回车即可了 文档的问题-修改word文档创建时间"> 2.之后定位在注册表左边的HKEY_CURRENT_USERSoftwareMicrosoft Office,我们点击"office"选项后,再点击窗口左上角的文件,选择"导出". 3.之后会弹出保存的窗口,我们选择好保存目录,将文件名修改为"wdata"然后点击保存. 4.好了现在我们在o

asp.net Word文档下载代码

asp教程.net word文档下载代码   //第一种方法: string path = server.mappath("文件名.doc"); fileinfo file = new fileinfo(path); filestream myfilestream = new filestream(path, filemode.open, fileaccess.read); byte[] filedata = new byte[file.length]; myfilestream.re

c#编程实现word 文档如何导入SQL Server数据库表中

操作WORD配置说明 引入:Word的对象库文件"MSWORD.OLB"(word 2000为MSWORD9.OLB) 1.运行Dcomcnfg.exe 2.组件服务――计算机――我的电脑――DCOM配置――找到microsoft word 文档 3.点击属性 4.选择"安全性" 5.选定"使用自定义访问权限"和"使用自定义启动权限" 6.分别编辑权限,添加Everyone(ASPNET,VS Developers,Debug