毕业设计(论文)WORD文档分类管理模块的编写.doc

上传人:laozhun 文档编号:4027399 上传时间:2023-04-01 格式:DOC 页数:30 大小:301.50KB
返回 下载 相关 举报
毕业设计(论文)WORD文档分类管理模块的编写.doc_第1页
第1页 / 共30页
毕业设计(论文)WORD文档分类管理模块的编写.doc_第2页
第2页 / 共30页
毕业设计(论文)WORD文档分类管理模块的编写.doc_第3页
第3页 / 共30页
毕业设计(论文)WORD文档分类管理模块的编写.doc_第4页
第4页 / 共30页
毕业设计(论文)WORD文档分类管理模块的编写.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《毕业设计(论文)WORD文档分类管理模块的编写.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)WORD文档分类管理模块的编写.doc(30页珍藏版)》请在三一办公上搜索。

1、WORD文档分类管理模块的编写摘 要随着计算机普及和计算机科学技术的发展,并且由于电子文档具备方便性、快捷性和易操作性,人们将大部分信息以电子文档形式储存和归档。面对与日骤增的海量数据信息,对它们进行有效的整理和管理变得尤其重要。人们越来越期望能在统一的文档操作界面上,对各类文档信息进行收集收藏、整理归档,方便查询。本文详细介绍了Word文档分类管理软件的设计和实现。软件对用户需求做了充分的考虑,进行正确和较完整的设计,使得能在统一的文档界面上,方便地对磁盘上所有文档(可包括其它存储介质,如:移动硬盘等,文档指Microsoft Office里的Word文档,后缀名为.doc)进行分类管理。文

2、档管理功能包括:新建记录、打开文档、编辑记录、删除记录或文档、添加文档等。本软件以Word插件形式实现,在Word工具档里增加自定义工具,并实现上述各种功能。系统根据com组件编程原理,用Visual Basic 6.0实现了一个Word插件,并用Office 2003 Access保存文档分类信息。关键词:COM组件;Word插件;文档分类器The Design and Implementation of a Word Addin for Document Classification ManagementAbstractWith the popularity of computer sci

3、ence and the development of computer technology, along with the advantages of electronic documents such as convenience, efficiency and ease to use, most of information is stored and archived in the form of electronic document. Faced with the fact that amount of information increasing ceaselessly, it

4、 is more and more urgent to find a way to manage and access information effectively and easily. It is expected that we can collect, archive and refer to any types of documents facilely in a unified document interface.This article introduces the design and implementation of a Word document classifica

5、tion management software. This system took the users entire requirement into consideration, and was designed correctly and completely, with which any types of document on the disk (including not only the Word documents but also other types on other media) can be classified and managed in a unified d

6、ocument interface. Its document management functions includes: creating, editing and deleting document records and adding or removing files into or from the records.The software is implemented in the form of a Word addin component, which adds a user-defined toolbar into the Word, and implemented the

7、 functions mentioned above from with the toolbar. Obeying the principles of COM component programming, it is implemented with Visual Basic 6.0 and saves the document classification information in a database of Office2003 Access.Key words: COM Component; Word Addin; Document Classifier目 录论文总页数:31页1引言

8、11.1课题背景11.2本课题研究的意义11.3本课题的研究方法12组件、COM、接口、插件12.1组件12.1.1使用组件的优点22.1.2对组件的需求22.2COM42.3接口62.3.1IUnknown接口72.3.2Dispatch82.4插件83WORD对象模型93.1WORD中的对象模型(OBJECT MODEL)93.2WORD对象模型抽象图94系统分析和设计104.1功能需求分析104.2数据存储结构分析114.3数据库设计115系统实现135.1插件接口方法135.2事件响应145.3系统实现155.3.1添加Word插件165.3.2添加Word工具栏175.3.3连接数据

9、库185.4功能模块设计和实现195.4.1新建功能215.4.2打开文档功能235.4.3编辑记录功能235.4.4添加文档功能245.4.5删除文档和记录功能25结 论28参考文献281 引言1.1 课题背景随着计算机普及和计算机科学技术的发展,电子文档具备有方便性、快捷性、易操作性,人们将大部分信息以电子文档形式储存和归档。面对与日俱增的海量数据信息,对它们进行有效整理和管理变得尤其重要。人们越来越期望能在统一的文档操作界面上,对各类文档信息进行收集收藏、整理归档,方便查询。1.2 本课题研究的意义Word文档是实际工作学习中最为常用的文档格式之一,为了增强Word、Excel等软件的自

10、动化能力,人们开发了各种提高办公效率的软件,它们大多数实用、专业性强。为了避免用户做大量重复性的工作,提高Office办公效率,达到提高其实用功能的目的,可根据具体工作内容要求,编写出最具本地化、个性化、最合适的软件。1.3 本课题的研究方法通过对人们日常Office办公情况及存在问题进行透彻分析,并根据办公习惯,总结出较可行的解决方案。2 组件、COM、接口、插件2.1 组件一个应用程序通常是由单个的二进制文件组成。当编译器生成此应用程序之后,在对下一版本重新编译并且发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统、硬件及客户需求的改变都必须等到整个应用程序被重新编译之后才能够得

11、以认可,整个软件工程就这样随着已发行软件而日益老化。目前这种状况已经发生了变化。人们认识到应用程序在发行之后不应保持那种静止的状态。开发人员应找出一种方法,以能够给已经发行的软件不断地注入新的活力。这种解决方案就是将整个的应用程序分隔成多个独立的部分,也即组件。此作法的好处是可以随着技术的不断发展而用新的组件取代已有的组件。此时的应用程序将不再像以前那样是一个在发行之前就已命中注定要过时的静态实体,而是可以随着新组件不断取代旧的组件而趋于完善,并且从已有的组件可以建立全新的应用程序。传统的作法是将应用程序分割成文件、模块或类,然后将它们编译并链接成一个铁板一块状的应用程序。它与组件建立应用程序

12、的过程(称为是组件架构)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译、链接好并可以使用了,应用程序就是由多个这样的组件打包而得到的。各定制的组件可以在运行时同其他组件连接起来以构成某个应用程序。在需要对应用程序进行改进时,只需将构成此应用程序的组件中的某个用新的版本替换掉即可。当然将铁板应用程序拆分成组件需要一个强大的工具。我们所用的工具就是COM。COM,即组件对象模型,是关于如何建立组件以及如何通过组件建构应用程序的一个规范。目前Microsoft的几乎所有应用程序都使用了COM。2.1.1 使用组件的优点前面已经提到过组件架构的一个优点:应用程序可随时间的流逝而发展进化。

13、除此之外,使用组件还有一些可以使对已有应用程序的升级更加方便和灵活的优点,如应用程序的定制,组件库以及分布式组件等。1.组件架构从本质上讲就是可被定制的,因此用户可以用更能满足他们需要的组件来将某个组件替换掉。2.组件架构最引人注目的优点之一是快速应用程序开发。这一优点可以使开发人员从某个组件库中取出所需的组件,并将其快速地组装到一块以构造所需的应用程序,如同搭积木块一样。这种从标准的部件构造应用程序的做法,很长时间以来一直是软件工程师们的一个未曾实现的梦想。但是现在这一梦想随着ActiveX控件(以前被称作是OLE控件)的开发而正在被变为现实。Visual Basic、C、C+以及Java程

14、序员都可以利用ActiveX控件加速应用程序及Web页面的开发。3.随着网络带宽及其重要性的提高,对由分布在网络上的多个部分组成应用程序的需求毫无疑问将保持强劲的增长势头。组件架构可以使得开发这类分布过程得以简化。实际上客户机服务器式的应用就是向组件架构跨出的第一步。在那里整个应用程序被分成两部分:客户机部分及服务器部分。2.1.2 对组件的需求使用组件的种种优点直接来源于可以动态地将它们插入或卸出应用程序。当然为了实现这种功能,所有的组件必须满足两个条件。第一,组件必须动态连接。第二,它们必须隐藏(或封装)其内部实现细节。两个需求是相互依赖的。动态链接对于组件而言是一个至关重要的需求,而信息

15、隐藏则是动态链接的一个必要条件。1.动态链接:我们的最终目标是使用户在应用程序的运行过程中能够将组件替换掉。虽然并不是在所有的应用程序中都需要给用户提供这种控件,但我们却希望能够将组件动态地链接到一起。可以设想一下对于一个由组件构成的,但不能在运行时进行链接的应用程序,当用户需要改变其中的某个组件时会发生什么。此时开发人员不得不将整个程序重新链接或编译一遍,然后重新发行新的版本。但是这种重新编译或链接对于最终用户几乎是不可能的事情。即使他们知道如何链接,但他们可能没有链接程序,或者没有合适的链接程序。这种需要每次改变一个组件时就将其链接一遍的程序和传统的铁板一块的程序实际上没有什么差别。2.信

16、息封装:为组成一个应用程序,需要将各组件连接起来。当需要将某个组件用新的组件替换掉时,需要将此组件同系统断开,然后将新的组件连上去。显然新的组件必须按同样的方式连接到系统中,否则将需要重新编写、重新编译或重新链接这些组件。不论组件或应用程序是否支持动态链接,如果改变了某个组件同其他组件的连接方式,那么整个系统的整体性实际已被破坏了,此时至少需要将整个系统编译一遍,甚至可能需要重新编码。对于一个应用程序或组件,如果它使用了其它组件,那么我们称之为一个客户,客户通过接口同其他组件进行连接。如果某个组件发生了变化但其接口没有任何变化,那么它的客户将不需要进行任何修改。类似地,若客户发生了变化但没有改

17、变其接口,那么它连接的组件也不需要任何改变。但是如果客户或组件的修改导致了对接口的修改,那么接口的另一方也应发生相应的变化。因此为充分发挥动态链接的功能,组件及客户都应尽可能不要改变它们的接口。这意味着它们必须被封装起来。也就是说,组件及客户的内部实现细节不能反映到接口中,接口同内容实现细节的隔离程序愈高,组件或客户发生变化时对接口的影响将越小。在接口没有发生任何变化时,对组件的修改将几乎不会对应用程序的其它部分产生什么影响。这种将客户同组件实现相应隔离开来的要求对于组件加上了一些限制:1.组件必须将其实现所用的编程语言封装起来。任一客户都应能使用任一组件,不论他们是用什么编程语言实现的。将实

18、现的编程语言暴露出来只会在组件及客户间引入新的依赖。2.组件必须以二进制的形式发布。如果想将实现组件的编程语言隐藏起来,那么在发布时它们必须是已被编译、链接好并且马上就可以投入使用的。3.组件必须可以在不妨碍已有用户的情况下被升级。一个组件的新版本必须既能够同老版本的客户一起使用。也可以同新版本的客户一起使用。4.组件在网络上的位置必须可以被透明地重新分配。组件及使用它的程序应能够在同一进程中,不同的进程或不同的机器上运行。客户对远程组件的处理方式应与对本地组件的处理方式是一样的。否则,当将某个本地组件移动到网络上的另外某个地方时,客户程序必须被重新编译。将以上几点加以说明:1.与语言的无关性

19、。为方便讨论起见,假定某个应用程序只能使用由Objective C编写的组件进行定制。这样一来,将不会有太多的人来为此应用程序编写组件,因为大多数编程人员使用的是C+。以后我们可能会用C+来编写组件,从而使得应用程序可用的组件多起来。但如果后来另外有一种语言,假设是Espresso Beans变得流行起来,大家都放弃C+,转而使用这一语言。为了使用应用程序不被淘汰,我们需要用这种新语言来编写组件。如此就有了三种截然不同的编写组件的方法。在一个与语言无关的架构中,任何人均可以编写组件,并且这些组件不会因为编程语言的发展而过时。2.用户可能会拥有使用同一个组件的两个客户应用程序。假定其中的某个应用

20、程序被指定使用某个组件的新版本而另一个应用程序被指定来使用其老版本。显然人们希望老应用程序仍能够使用新安装的新版本组件。但这种向后兼容的能力不应对组件的发展造成限制。强行改变某个组件的功能以使之适应新应用程序的需要,同时使其能支持老的应用程序仍应是可能的。2.2 COM软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在的COM编程,目标只有一个,就是希望软件能像积方块一样是累起来的,是组装起来的,而不是一点点编出来的。结构化编程是函数块的形式,通过把一个软件划分成许多模块,每个模块完成各自不同的功能,尽量做到高内聚低藕合。件工程的核心就是要模块化,最理想的情况就是100%内聚0

21、%藕合。结构化编程方式只是一个开始。下一步就出现了面向对象编程,它相对于面向功能的结构化方式是一个巨大的进步。面向功能的模块化方法它的着眼点是事物之间的联系,它眼中看不到事物的概念它只注重功能。面向功能的结构化方法因为它注意的只是事物之间的联系,而联系是多变的,事物本身可能不会发生大的变化,而联系则是很有可能发生改变的,联系一变,那就是另一个世界了,那就是另一种功能了。如果我们用面向对象的方法,我们就可以以不变应万变,只要事先把事物用类描述好,我们要改变的只是把这些类联系起来的方法,只是重新使用我们的类库,而面向过程的方法因为它构造的是一个不稳定的世界,所以一点小小的变化也可能导致整个系统都要

22、改变。然而面向对象方法仍然有问题,问题在于重用的方法。搭积木式的软件构造方法的基础是有许许多多各种各样的可重用的部件、模块。我们首先想到的是类库,因为我们用面向对象的方法产生的直接结果就是许多的类。但类库的重用是基于源码的方式,这是它的重大缺陷。首先它限制了编程语言。其次你每次都必须重新编译,只有编译了才能与你自己的代码结合在一起生成可执行文件。另一种重用方式很自然地就想到了是DLL的方式。Windows里到处是DLL,它是Windows的基础,但DLL也有它自己的缺点。总结一下它至少有四点不足。(1)函数重名问题。DLL里是一个一个的函数,我们通过函数名来调用函数,那如果两个DLL 里有重名

23、的函数怎么办?(2)各编译器对C函数的名称修饰不兼容问题。对于C函数,编译器要根据函数的参数信息为它生成修饰名,DLL库里存的就是这个修饰名,但是不同的编译器产生修饰的方法不一样,所以你在VC里编写的DLL在BC里就可以用不了。不过也可以用extern C来强调使用标准的C函数特性,关闭修饰功能,但这样也丧失了C的重载多态性功能。(3)路径问题。放在自己的目录下面,别人的程序就找不到,放在系统目录下,就可能有重名的问题。而真正的组件应该可以放在任何地方甚至可以不在本机,用户根本不需考虑这个问题。(4)DLL与EXE的依赖问题。我们一般都是用隐式连接的方式,就是编程的时侯指明用什么DLL,这种方

24、式很简单,它在编译时就把EXE与DLL绑在一起了。如果DLL发行了一个新版本,我们很有必要重新链接一次,因为DLL里面函数的地址可能已经发生了改变。DLL的缺点就是COM的优点。COM和DLL一样都是基于二进制的代码重用,所以它不存在类库重用时的问题。另一个关键点是,COM本身也是DLL,既使是ActiveX控件.ocx它实际上也是DLL,所以说DLL现在还是有重用上有很大的优势,通COM本身的机制改变了重用的方法,以一种新的方法来利用DLL,来克服DLL本身所固有的缺陷,从而实现更高一级的重用方法。COM没有重名问题因为根本不是通过函数名来调用函数,而是通过虚函数表,自然也不会有函数名修饰的

25、问题。路径问题也不复存在,因为是通过查注册表来找组件的,放在什么地方都可以,即使在别的机器上也可以。也不用考虑和EXE的依赖关系了,它们二者之间是松散地结合在一起,可以轻松地换上组件的一个新版本。简单地说,COM是一种跨应用和语言共享二进制代码的方法。与C+不同,它提倡源代码重用。源码级重用虽然好,但只能用于C+。它还带来了名字冲突的可能性,更不用说不断拷贝重用代码而导致工程膨胀和臃肿。Windows使用DLLs在二进制级共享代码。这也是Windows程序运行的关键重用kernel32.dll,user32.dll等。但DLLs是针对C接口而写的,它们只能被C或理解C调用规范的语言使用。由编程

26、语言来负责实现共享代码,而不是由DLLs本身。这样的话DLLs 的使用受到限制。MFC 引入了另外一种MFC扩展DLLs 二进制共享机制。但它的使用仍受限制只能在MFC程序中使用。COM通过定义二进制标准解决了这些问题,即COM 明确指出二进制模块(DLLs和EXEs)必须被编译成与指定的结构匹配。这个标准也确切规定了在内存中如何组织COM对象。COM定义的二进制标准还必须独立于任何编程语言。一旦满足了这些条件,就可以轻松地从任何编程语言中存取这些模块。由编译器负责所产生的二进制代码与标准兼容。这样使后来的人就能更容易地使用这些二进制代码。在内存中COM对象的这种标准形式在C+虚函数中偶尔用到

27、,所以这就是为什么许多COM代码使用C+的原因。但是记住,编写模块所用的语言是无关的,因为结果二进制代码为所有语言可用。此外,COM不是Win32特有的。从理论上讲,它可以被移植到Unix或其它操作系统,但是好像还从来没有在Windows以外的地方听说过COM。2.3 接口由于组件向外部隐藏了其内部的细节,因此客户要使用组件时就必须通过一定的机制,也就是说要通过一定的方法来实现客户与组件之间的通信,这就需要接口。所谓接口就是组件对外暴露的、向外部客户提供服务的“连接点”。外部的客户见不到组件内部的细节,它所能看到的只是接口,客户也是通过接口来获取组件提供的服务。这有点像OSI网络协议分层模型,

28、每一层就像一个组件,它内部的实现细节对于其他层是不可见的;而每一层通过“服务接入点”向其上层提供服务,这就像这里所说的接口。一般来说,接口总是固定的,也是公开的。组件的开发人员要实现这些接口,而客户则通过接口获得服务。正是接口的这种固定和公开,才使得组件和客户能够在不了解对方的情况下达成一致。接口提供了两个不同对象间的一种连接。实际上计算机程序是通过一组函数而连接起来的。这组函数实际上就定义了程序中不同部分的接口。DLL的接口就是它所输出的那些函数。COM中的接口也涉及到一组由组件实现并提供给客户使用的函数。对于COM来说,接口是一个包含一个函数指针数组的内存结构。第一个数组包含的是一个由组件

29、所实现的函数的地址。对于COM而言,接口就是此内存结构,其它东西均是一个COM并不关心的实现细节。接口的作用:在COM中接口就是一切。对于客户来说,一个组件就是一个接口集。客户只能通过接口才能同COM组件打交道。从整体上讲,客户对于一个组件可以说是知之甚少的。在某些情况下,客户甚至不必知道一个组件所提供的所有接口。可复用应用程序架构:说组件仅仅只是接口的实现细节当然有点言过其实。不管怎么说,一个未被实现的接口实际上什么也不能完成。但是组件可从应用程序中删除并可用另外一个组合来取代之。只要新的组件支持同组件相同的接口,那么整个应用程序将仍然能够工作。单个的组件并不能对整个应用程序产生决定的作用。

30、相反,用以连接组件的接口将对整个应用程序产生决定性的作用。只要接口保持不变,那么组件可以任意地更换。接口同木板房中的大梁非常类似。这些大梁决定了整个房屋的结构。同样可以将应用程序所用的组件替换掉,这样应用程序的行为将会发生变化,但从结构上讲,整个应用程序并没有发生任何变化。使用组件来构造应用程序的最大的优点在于可以复用应用程序的结构。如果接口设计得好的话,将可以得到可复用极高的结构。当然使用接口除了可以设计出可复用的结构外,还有其它若干优点。COM接口的其它优点:接口使得客户可以用同样的方式来处理不同的组件。这种能力就被称作是多态。这些优点是通过接口将某个特定的行为封闭起来而获得的。2.3.1

31、 IUnknown接口COM中的所有内容都起于接口,又最终归于接口。客户同组件的交互都是通过一个接口完成的。在客户查询组件的其它接口时,也是通过接口完成的。这个接口就是IUnknown。IUnknown接口的定义包含在Win32 SDK中的UNKNWN.H头文件中。这个接口实际上是所有的组件及客户都知道的,但它的名字却表示出它是一个“未知的”接口。之所以使用这个名字主要也是为简单起见。所有的COM接口都需要继承IUnknown。因此若某个客户拥有一个IUnknown接口的指针,它并不需要知道它所拥有的接口指针到底是什么类型的,而只需知道此接口可以用来查询其它接口就行了。Interface IU

32、nknownVirtual HRESULT_stdcall QueryInterface(const IID&iid,void*ppv)=0;Virtual ULONG_stdcall AddRef()=0;Virtual ULONG_stdcall Release ()=0;从上面可以看出IUnknown有三个方法:AddRef():通知COM增加它的引用计数。如果进行了一次接口指针的拷贝,就心须调用一次这个方法,并且原始的值和拷贝的值两者都要用到。Release():通知COM对象减少它的引用计数。QueryInterface():从COM对象请求一个接口指针。当coclass实现一个以上

33、的接口时,就要用这个方法。当使用CoCreateInstance()创建对象的时候,你得到一个返回的接口指针。如果这个COM对象实现一个以上的接口(不包括IUnknown),你就必须用QueryInterface()方法来获得任何你需要的附加的接口指针。QueryInterface()的原型如下:HRESULT IUnknown:QueryInterface (REFIID iid,void* ppv );以下是参数解释:Iid:所请求的接口的IID。ppv:接口指针的地址,QueryInterface()通过这个参数在成功时返回接口。2.3.2 Dispatch自动化使得用解释性语言和宏语言

34、访问COM组件更为容易,同时用这些语言编写组件也将更为容易。自动化关注的是运行时的类型检查,这一点是以速度的牺牲和编译时的类型检查为代价的。自动化不是独立于COM的,而是建立在COM基础上的。一个自动化服务器实际上就是一个实现了IDispatch接口的COM组件。而一个自动化控制器则是一个通过IDispatch接口同自动化服务器进行通信的COM客户。自动化控制器不会直接调用自动化服务器的那些函数,而是通过IDispatch接口中的成员函数实现对服务器中函数的间接调用。IDispatch接口同自动化的其它所有方法一样,是作为Visual Basic的一部分开发出来的,以专门用于将一些应用程序如M

35、icrosoft Word和Microsoft Excel自动化。Microsoft Office的开发VBA实际上就是从Visual Basic发展来的。通过COM接口提供的任何服务都可以通过IDispatch接口来提供。由于IDispatch为客户和组件提供了另外一种通信方式。有了IDispatch之后,COM组件就可以通过一个标准的接口提供它所支持的服务,而无需提供多个特定于服务的接口。简单地讲,IDispatch将接收一个函数的名称并执行它。2.4 插件插件是一种遵循一定规范的应用程序接口编写出来的程序。插件是一类特殊的组件。它的目的不是为一般应用程序使用,而是专为特定的应用程序使用。

36、插件的本质是在不修改程序主体的情况下对软件功能进行加强,当插件的接口被公开时,任何公司或个人都可以自己制作插件来解决一些操作上的不便或增加一些功能。插件还可以支持多人合作开发,不同的功能可以由不同的人来完成,而且由于不同插件之间互不影响,方便程序的调试和纠错。插件一般在宿主应用程序上添加控制项,如菜单、工具按键等。插件响应宿主程序中对这些项目的操作,并对宿主程序中的数据进行特定操作。插件类型从广义的范围来看,插件有以下三种类型:1类似批命令的简单插件。事实上这种插件的自由度非常低。运行这种插件后,会一步步要求用户进行选择/输入,最后根据用户的输入来执行一系列事先定义好的操作。这种插件一般是文本

37、文件。功能比较单一,可扩展性极小。优点是插件做起来非常方便,即使是对程序设计了解不多的人也可以制作。2使用一种特殊的脚本语言来实现的插件。这种插件比较难写,需要软件开发者自己制作一个程序解释内核。比如微软惹了很多麻烦的宏就是这种类型的。有一套著名的Office辅助工具就是完全用Office内置的VBScript写成的。这种方法的优点在于无需使用其它工具来制作插件,软件本身就可以实现,普遍出现于各种办公自动化软件中。3利用已有的程序开发环境来制作插件。例如PhotoShop等软件使用的方法。使用这种方法的软件在程序主体中建立了多个自定义的接口,使插件能够自由访问程序中的各种资源。这种插件的优势在

38、于自由度极大,可以无限发挥插件开发者的创意,这种插件是狭义范围的插件,也是真正意义上的插件。而这种插件机制的编写相对复杂,对于插件接口之间的协调比较困难。3 Word对象模型3.1 Word中的对象模型(Object Model)什么是对象模型?简单地说,用户在Word中操作和改变的每一个东西都是一个对象,这些对象的相互关系组成了Word中的对象模型。在Word中,文档、对话框、文本框、图形、图表甚至Word本身都是对象,同时,这些对象都有自己的属性和方法,因此,用户可通过编程来访问这些已有对象,改变它们的属性,以完成某些较高级的功能。在对象模型中,还有一个重要的概念是集合(collectio

39、ns),所谓集合,就是由一组相近对象的组合,它们隶属于另一个大对象,例如sentences、words和characters对象,就可看成一个集合,它们都隶属于Range对象,集合的重要属性是我们可以对之进行整体操作,当然也可对集合中的某个对象进行操作。3.2 Word对象模型图1 对象模型抽象图Application对象包含Document、Selection、Bookmark和Range对象。Word提供了数百个可与之交互的对象。这些对象包括:Application对象Document对象Selection对象Range对象Bookmark对象Application对象表示Word应用程序

40、,是其他所有对象的父级。它的所有成员通常作为一个整体应用于Word。可以使用该对象的属性和方法来控制Word环境。Document对象Microsoft.Office.Interop.Word.Document对象是Word编程的中枢。当打开文档或创建新文档时,就创建了新的Microsoft.Office.Interop.Word.Document对象,该对象被添加到Word的Documents集合中。焦点所在的文档叫做活动文档,由Application对象的ActiveDocument属性表示。4 系统分析和设计4.1 功能需求分析Word是微软公司的Office系列办公组件之一,是目前世界

41、上最流行的文字编辑软件,它无疑是现代办公中使用最多的字处理软件。现在已能把各种形式的信息资料存储到Word文档中,如文字、图片、超连接等。面对大量文档信息,对它们分类管理显得尤其重要。由于日常工作中要处理的文档越来越多,而如果不对其分类整理将造成需要时查找等麻烦。特别是处理文字文档较多的工作,如财务管理,文秘等工作。解决以上问题有两种方法可行:一、利用Windows对磁盘文件、文件夹的分级管理功能。如在D盘上新建几个文件夹,分别代表各类性质的文档。此方法解决了对文档的分类存储问题,但极不方便。如在使用文档时,只能找到某个盘下的某个目录,再进行新建文档、删除文档、重命名文档等操作,当文档多且所分

42、的等级较多时(就是盘符下面的文件夹级数多),将浪费时间,影响办公效率,当要求多次重复此等操作时,更显其弊端。二、开发Word插件。此插件在打开Word软件时被加载,以工具档里工具的形式出现。点击此工具,就可对文档进行各种随心所欲的操作,但不改变文档内容,也就是说此插件是基于文档的存储路径的,而不是基于文档本身。首先,插件基于文档的存储路径,因此“存取自由”是它的一个特色。用户可将文档存放在磁盘任何地方(建议不放在本地C盘或桌面),也包括来自网络上的文档路径,当磁盘空间有限的时候,可以充分体现这一优势。其次,插件允许用户对文档进行任何操作。包括新建、打开、编辑、删除文档等等。此插件还有一个重要特

43、点,就是以工具栏里的工具形式出现,在启动Word软件时被加载。因此它很“轻量级”,占用系统资源少,使用方便,容易卸载。4.2 数据存储结构分析系统的数据存储方式可有两种理想的选择:XML和Access关系数据库。XML提供了一套跨平台、跨网络、跨程序语言的数据描述方式,使不同系统之间的数据交换更加高效。但如果从更高的技术角度出发,就会发现,对XML文档简单的文件管理是远远不够的:低效的存储组织、索引查询技术,不提供事务、安全恢复机制,无法保证数据的完整性和一致性,没有并发控制、移植工具等。用XML可方便实现无限层分类目录的保存。关系数据库是实体间联系是固定的,有良好的完整性支持,对具有一对多的

44、层次关系,更为直接的描述现实世界,有良好的性能,存取效率较高,建立在严格的数学概念的基础上,概念单一,实体与实体间的联系都用关系表示,数据结构简单、清晰,存取路径对用户透明,有更高的数据独立性和更好的安全保密性。Access适用于小型商务活动,用以存贮和管理商务活动所需要的数据。Access不仅是一个数据库,而且它具有强大的数据管理功能,它可以方便地利用各种数据源,生成窗体(表单),查询,报表和应用程序等。使用Microsoft Access,可以在单一的数据库文件中管理所有的信息。基于系统需求分析和Visual Basic语言对Access数据库的强大支持,及Access自身具有的便捷、易使

45、用等特点,系统选用Access数据库存储相关记录。4.3 数据库设计由于系统基于文档存储路径,操作修改对象大部分对于路径和相关记录,因此数据库只对文档的路径和相关记录进行存储,而不是文档。系统把记录分为三层,即三个部分,共三张表,分别用来存储目录、文件夹和文档路径。用表table1存储目录,表table2存储文件夹,表table3存储文档记录。如图:图2 数据库表图目录表table1:用于存储记录的最高级目录。包括两列:sort_id,自动编号,主键;sort,文本类型,储存目录名称。图3 目录表table1文件夹表table2:用于保存记录的中间层,也就是目录的下一层。包括三列:fold_i

46、d,自动编号,主键;ref_table1_id,数字类型,外键,用于关联table1的sort_id;fold,文本类型,用于保存文件夹记录名称。图4文件夹表table2文档路径表table3:用于保存文档路径,文件夹的下一层也就是最底层。包括四列:file_id,自动编号,主键;ref_table2_id,数字类型,外键,关联到table2的fold_id;filename,文本类型,用于保存文档的文件名;filepath,文本类型,用于保存文档的存储相对路径。图5 文档表table3表之间的关系如图:图6 表关系图5 系统实现5.1 插件接口方法当VB运行时,在Add-In菜单中装载组件以

47、后,VB就会调用组件中IDTExtensibility对象中的OnConnection方法。在OnConnection方法里定义Application对象变量,并调用CommandBars.Add方法,就可在程序运行时加载工具栏。在“引用”对话框中选择“Microsoft Office 8.0 Object library”复选框,可以通过“对象浏览器”访问并浏览各种命令条对象。因为菜单和工具栏属于相同的对象库,它们都将通过CommandBarControl对象被引用。一个菜单条命令条可以包括几个菜单项,每个菜单项本身也是一个命令条,而且它又可以包括若干个菜单命令,每条命令依然是一个命令条。利

48、用这种模式可以很容易地在开发环境中放置外接程序。使用commandBars集合对象用外接程序来添加命令栏和控件。在OnConnection事件过程定义Application、commandbars对象变量,此过程创建新的命令条按钮,并返回对它的对象变量,并定义commandbar上按键的事件。5.2 事件响应从结构上来看,一个VB插件实际上是一个COM组件,原则上组件可以使用支持COM的开发工具。组件通过实现COM中的IDTExtensibility对象来建立与VB的连接。组件注册以后,当VB运行中在Add-In菜单中装载组件后,VB就会调用组件中IDTExtensibility对象中的相应方法(如在装载组件后会调用OnConnection方法)。这时整个插件就成为VB的一部分从而可以访问VB开发环境中的各种对象和资源了。在Client派生一个IDispEventImpl类来实现IDispatch接口的Sink。在OLE中,连接点是指一种由

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号