分类号 TP317.1 UDC D10621-408-(2007) 3709-0密 级 公开 编号 2003032082成都信息工程学院学位论文Excel条件格式化工具的设计与实现论文作者姓名:孙鹏申请学位专业:网络工程申请学位类别:工学学士指导教师姓名(职称):李贵洋(副教授)论文提交日期:2007年 7 月 24日Excel条件格式化工具的设计与实现摘要Excel是一个在各个领域中被广泛应用的电子表格软件。通过它,我们可以很好的组织管理数据,对数据进行统计分析等。在实际应用中,我们发现经常需要根据某种特定的条件,特殊显示部分数据。虽然这种功能可以通过Excel宏来实现,但每次编写类似的代码使人感觉跟不方便。Excel同其它Office组件一样,提供了通过插件进行功能扩展的可能。通过编写和安装插件,我们可以几乎任意地扩展Excel的功能,为我们的工作提供极大的便利。本文详细介绍了一个Excel条件格式化软件的设计和实现。该软件使用COM组件技术,根据Office插件的接口要求,设计了一个Excel的插件。该插件在Excel应用程序的窗口中增加一个工具栏,并在其上创建了一个按键,用于打开格式化设置窗口。软件可以对用户输入的、用字符串表达的判断条件进行计算,并根据计算结果,将满足条件的单元数据设置为用户选择的特殊格式(字体、颜色、字号、修饰等)关键词:Excel插件;COM组件;接口The Design and Implementation of the Conditionally Formatting Tool for ExcelAbstractExcel is an electronic sheet software which is extensively used in various fields. By using it, we can organize and manage data, statistically analysis data easily. In practical applications, we need it usually need to specially show some data under certain conditions. This function can be achieved by using Excel macros. However,such a method is inconvenient in writing similar codes in each time. Excel, as long as other Microsoft Office softwares, povides a standard plug-in interface, also called add-in, to allow users to expand its functionalities. By writing addins for Excel, we can almost unlimitedly to expand its functionality and makes our work more easily and effectively. This paper introduces the design and implementation of an Excel conditional formatting addin, which is implemented by the COM component technique according to the interface requirements of Excel. The conditional formatting addin adds a new Toolbar into Excel, on which there is a button to be used to open the format setting dialog. The software can calculate the results of the condition expressions inputted by the user in the form of string, and according to the result, it sets the format of the cells matching the use-defined condition to special formats (font, color, font size and decoration) that was inputted by the user.Key words: Excel Addin; COM Component; Interface目 录 论文总页数:23页 TOC \O "1-3" \H \Z \U HYPERLINK \L "_TOC175129103" 1引言 PAGEREF _TOC175129103 \H 1 HYPERLINK \L "_TOC175129104" 2 Com组件的实现技术 PAGEREF _TOC175129104 \H 1 HYPERLINK \L "_TOC175129105" 2.1 COM组件技术 PAGEREF _TOC175129105 \H 1 HYPERLINK \L "_TOC175129106" 2.2 接口 PAGEREF _TOC175129106 \H 2 HYPERLINK \L "_TOC175129107" 2.3 插件技术 PAGEREF _TOC175129107 \H 3 HYPERLINK \L "_TOC175129108" 2.4 EXCEL对象模型 PAGEREF _TOC175129108 \H 4 HYPERLINK \l "_Toc175129109" 2.4.1 Excel对象模型的类以及之间的关系 175129109 4 HYPERLINK \l "_Toc175129110" 2.4.2 使用Excel 175129110 5 HYPERLINK \l "_Toc175129111" 2.4.3 引用Application对象 175129111 5 HYPERLINK \l "_Toc175129112" 2.4.4 Application对象常用的属性、方法 175129112 6 HYPERLINK \l "_Toc175129113" 2.4.5 使用工作薄 175129113 6 HYPERLINK \l "_Toc175129114" 2.4.6 使用工作表 175129114 8 HYPERLINK \L "_TOC175129115" 2.5 VB编写组件基本介绍 PAGEREF _TOC175129115 \H 9 HYPERLINK \l "_Toc175129116" 2.5.2 在VB中编写COM组件 175129116 9 HYPERLINK \L "_TOC175129117" 3 Excel条件格式化工具的具体实现 PAGEREF _TOC175129117 \H 12 HYPERLINK \L "_TOC175129118" 3.1插件接口方法 PAGEREF _TOC175129118 \H 12 HYPERLINK \L "_TOC175129119" 3.2 Excel插件的实现 PAGEREF _TOC175129119 \H 13 HYPERLINK \l "_Toc175129120" 3.2.1插件实现的功能 175129120 13 HYPERLINK \l "_Toc175129121" 3.2.2具体功能实现 175129121 13 HYPERLINK \L "_TOC175129122" 参考文献 PAGEREF _TOC175129122 \H 21 HYPERLINK \L "_TOC175129123" 致 谢 PAGEREF _TOC175129123 \H 22 HYPERLINK \L "_TOC175129124" 声 明 PAGEREF _TOC175129124 \H 23Excel条件格式化工具的设计与实现1引言我们生活的这个世界是丰富多彩的,几乎所有的知识都来自于视觉。也许无法记住一连串的数字,以及它们之间的关系和趋势。但是可以很轻松地记住一幅图画或者一个曲线。Excel就具有许多高级的制图功能,同时使用起来也非常方便。它不仅可以用来制作电子表格、完成许多复杂的数据运算,还可以进行数据的分析和预测。Excel文档是实际工作学习中最为常用的文档格式之一,为了增强Word、Excel等软件的自动化能力,人们开发了各种提高办公效率的软件,它们大多数实用、专业性强。为了避免用户做大量重复性的工作,提高Office办公效率,达到提高其实用功能的目的,可根据具体工作内容要求,编写出最具本地化、个性化、最合适的软件。2 COM组件的实现技术2.1 COM组件技术COM 是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序, HYPERLINK "http://dev.21tx.com/os/" \t "_blank" 操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。COM所含的概念并不止是在Microsoft HYPERLINK "http://dev.21tx.com/os/windows/" \t "_blank" Windows操作系统下才有效。COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。一个应用程序通常使由单个的二进制文件组成的。当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统, HYPERLINK "http://diy.21tx.com/" \t "_blank" 硬件及客户需求的改变都必须等到整个应用程序被重新生成。目前这种状况已经发生变化。开发人员开始将单个的应用程序分隔成单独多个独立的部分,也既组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代以有的组件。此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。COM即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。使用组件的优点:组件架构的一个优点就是应用可以随时间的流逝而发展进化。除此之外,使用组件还有一些可以使对以有应用的升级更加方便和灵活的优点,如应用的定制,组件库以及分布式组件等。使用组件的种种优点直接来源于可以将它们动态的插入或卸出应用。为了实现这种功能,所有的组件必须满足两个条件:第一,组件必须动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。2.2 接口由于组件向外部隐藏了其内部的细节,因此客户要使用组件时就必须通过一定的机制,也就是说要通过一定的方法来实现客户与组件之间的通信,这就需要接口。所谓接口就是组件对外暴露的、向外部客户提供服务的“连接点”。外部的客户见不到组件内部的细节,它所能看到的只是接口,客户也是通过接口来获取组件提供的服务。这有点像OSI网络协议分层模型,每一层就像一个组件,它内部的实现细节对于其他层是不可见的;而每一层通过“服务接入点”向其上层提供服务,这就像这里所说的接口。一般来说,接口总是固定的,也是公开的。组件的开发人员要实现这些接口,而客户则通过接口获得服务。正是接口的这种固定和公开,才使得组件和客户能够在不了解对方的情况下达成一致。接口提供了两个不同对象间的一种连接。实际上计算机程序是通过一组函数而连接起来的。这组函数实际上就定义了程序中不同部分的接口。DLL的接口就是它所输出的那些函数。COM中的接口也涉及到一组由组件实现并提供给客户使用的函数。对于COM来说,接口是一个包含一个函数指针数组的内存结构。第一个数组包含的是一个由组件所实现的函数的地址。对于COM而言,接口就是此内存结构,其它东西均是一个COM并不关心的实现细节。接口的作用:在COM中接口就是一切。对于客户来说,一个组件就是一个接口集。客户只能通过接口才能同COM组件打交道。从整体上讲,客户对于一个组件可以说是知之甚少的。在某些情况下,客户甚至不必知道一个组件所提供的所有接口。可复用应用程序架构:说组件仅仅只是接口的实现细节当然有点言过其实。不管怎么说,一个未被实现的接口实际上什么也不能完成。但是组件可从应用程序中删除并可用另外一个组合来取代之。只要新的组件支持同组件相同的接口,那么整个应用程序将仍然能够工作。单个的组件并不能对整个应用程序产生决定的作用。相反,用以连接组件的接口将对整个应用程序产生决定性的作用。只要接口保持不变,那么组件可以任意地更换。接口同木板房中的大梁非常类似。这些大梁决定了整个房屋的结构。同样可以将应用程序所用的组件替换掉,这样应用程序的行为将会发生变化,但从结构上讲,整个应用程序并没有发生任何变化。使用组件来构造应用程序的最大的优点在于可以复用应用程序的结构。如果接口设计得好的话,将可以得到可复用极高的结构。当然使用接口除了可以设计出可复用的结构外,还有其它若干优点。COM接口的其它优点:接口使得客户可以用同样的方式来处理不同的组件。这种能力就被称作是多态。这些优点是通过接口将某个特定的行为封闭起来而获得的。2.3 插件技术插件是一类特殊的组件。它的目的不是为一般应用程序使用,而是专为特定的应用程序使用。插件一般在宿主应用程序上添加控制项,如菜单、工具按键等。插件响应宿主程序中对这些项目的操作,并对宿主程序中的数据进行特定操作。插件是一种遵循一定规范的应用程序接口编写出来的程序。插件是一类特殊的组件。它的目的不是为一般应用程序使用,而是专为特定的应用程序使用。插件的本质是在不修改程序主体的情况下对软件功能进行加强,当插件的接口被公开时,任何公司或个人都可以自己制作插件来解决一些操作上的不便或增加一些功能。插件还可以支持多人合作开发,不同的功能可以由不同的人来完成,而且由于不同插件之间互不影响,方便程序的调试和纠错。插件一般在宿主应用程序上添加控制项,如菜单、工具按键等。插件响应宿主程序中对这些项目的操作,并对宿主程序中的数据进行特定操作。插件类型从广义的范围来看,插件有以下三种类型:1.类似批命令的简单插件。事实上这种插件的自由度非常低。运行这种插件后,会一步步要求用户进行选择/输入,最后根据用户的输入来执行一系列事先定义好的操作。这种插件一般是文本文件。功能比较单一,可扩展性极小。优点是插件做起来非常方便,即使是对程序设计了解不多的人也可以制作。2.使用一种特殊的脚本语言来实现的插件。这种插件比较难写,需要软件开发者自己制作一个程序解释内核。比如微软惹了很多麻烦的宏就是这种类型的。有一套著名的Office辅助工具就是完全用Office内置的VBScript写成的。这种方法的优点在于无需使用其它工具来制作插件,软件本身就可以实现,普遍出现于各种办公自动化软件中。3.利用已有的程序开发环境来制作插件。例如PhotoShop等软件使用的方法。使用这种方法的软件在程序主体中建立了多个自定义的接口,使插件能够自由访问程序中的各种资源。这种插件的优势在于自由度极大,可以无限发挥插件开发者的创意,这种插件是狭义范围的插件,也是真正意义上的插件。而这种插件机制的编写相对复杂,对于插件接口之间的协调比较困难。2.4 EXCEL对象模型2.4.1 Excel对象模型的类以及之间的关系 Excel组件中定义了大量的类。下图显示了我们在软件开发中使用到的一些主要的类和它们之间的关系。图1 Excel对象模型片断2.4.2 使用Excel在VB应用程序中使用Excel,实质是将Excel作为一个外部对象来引用,由Excel对象模型提供能从VB应用程序内部来程序化操纵的对象以及相关的属性、方法和事件。为了能从VB应用程序中访问Excel丰富的内部资源,使Excel应用程序运行得更快,需要在VB工程中添加对Excel类型库的引用。具体步骤如下:a)从VB6"工程"菜单中选择"引用";b) 在"引用"对话框中选择Excel类型库:"Microsoft Excel 11.0 Object Library";c)单击左边小方框,使之出现"√"符号;d)按"确定"退出。注:要想在VB应用程序中调用Excel,你的计算机系统中必须安装Excel。2.4.3 引用Application对象Application对象是Excel对象模型的顶层,表示整个Excel应用程序。在VB应用程序中调用Excel,就是使用Application对象的属性、方法和事件。为此,首先要声明对象变量:Dim VBExcel As Object 或直接声明为Excel对象:Dim VBExcel As Excel.Application 在声明对象变量之后,可用CreateObject函数或GetObject函数给变量赋值。前者创建一个新的Excel实例,后者取得当前打开的Excel实例。两个函数均返回对Excel的Application对象引用。a)用CreateObject函数生成新的对象引用:Set VBExcel=CreateObject ("Excel.Application") 字符串"Excel.Application"是提供Excel应用程序的编程ID。b)用GetObject函数打开已存在的对象引用:Set AppExcel=GetObject("SAMP.XLS", "Excel.Application") 上面语句打开文件SAMP.XLS。2.4.4 Application对象常用的属性、方法Visible属性取True或False,表明Excel应用程序是否可见。Left,Top属性 Excel窗口的位置; Height, Width属性 Excel窗口的大小;WindowState属性 指定窗口的状态,取:XIMaximized(最大化)X1 Minimized(最小化)x1 Normal(缺省)。Quit方法 退出Microsoft Excel;Calculate方法 重新计算所有打开的工作簿、工作表或单元格。Evaluate方法 求值数学表达式并返回结果。示例1:求值数学表达式:Dim VBExcel As ObjectSet VBExcel=CreateObject ("Excel.Application")X=VBExcel. Evaluate ("3+5*(cos (1/log (99. 9)))") 在VB应用程序中使用Excel应用程序,就是通过Application对象的属性、方法来获得其它Excel对象,如工作簿、工作表、单元等待。下面分类给出其中常用的属性和方法。2.4.5 使用工作薄 Workbook对象代表Excel应用程序中当前打开的一个工作簿,包含在Workbooks集合中。可以通过Workbooks集合或表示当前活动工作簿的Active Workbook对象访问Workbook对象。常用的方法有:Add方法 创建新的空白工作簿,并将其添加到集合中。 Open方法 打开工作簿。 Activate方法 激活工作簿,使指定工作簿变为活动工作簿,以便作为Active Workbook对象使用。 Save方法 按当前路径和名称保存现有工作簿(如是首次保存,则将其保存到缺省名称中,如BOOK1.XLS)。 SaveAs方法 首次保存工作簿或用另一名称保存工作簿。 Close方法 关闭工作簿。 PrintOut方法 打印工作簿,语法为:PrintOut (from, To, Copies, Preview, Printer, ToFile, Collate)可选参数:From:打印的起始页号。如省略将从起始位置开始打印。To:打印的终止页号。如省略将打印至最后一页。Copies:要打印的份数。如省略将只打印一份。Preview:如果为True则Excel打印指定对象之前进行打印预览。如果为False,或省略则立即打印该对象。Printer:设置活动打印机的名称。ToFile:如果为True则打印输出到文件。Collate:如果为True则逐份打印每份副本。 下面语句将活动工作簿的2到5页打印3份:ActiveWorkbook.PrintOut From:=2 To 5 Copies:=3 示例2:生成、保存、关闭工作簿Dim VBExcel As Excel.ApplicationSet VBExcel== CreateObject("Excel.Application")With VBExcel.Workbooks.AddWith ActiveWorkbook.Save As"C: \Temp \OUTPUT.XLS".CloseEnd WithQuitEnd With 2.4.6 使用工作表Sheets集合表示工作簿中所有的工作表。可以通过Sheets集合来访问、激活、增加、更名和删除工作表。一个Worksheet对象代表一个工作表。Worksheets属性 返回Sheets集合。 Name属性 工作表更名。 Add方法 创建新工作表并将其添加到工作簿中。 Select方法 选择工作表。 Copy方法 复制工作表。 Move方法 将指定工作表移到工作簿的另一位置。 Delete方法 删除指定工作表。 PrintOut方法 打印工作表示例:将C盘工作簿中的工作表复制到A盘工作簿中Dim VBExcel As Excel.ApplicationSet VBExcel=CreateObject("Excel.Application") With VBExcel.Workbooks.Open "C:\Temp\OUTPUT.XLS".Workbooks.Open"A:\OUTPUT1.XLS".Workbooks("OUTPUT.XLS").Sheets ("Sales").Copy.Workbooks("OUTPUT1.XLS).Workbooks("OUTPUT1.XLS").Save.Workbooks("OUTPUT.XLS").Close.Workbooks("OUTPUTI.XLS").Close.QuitEnd With 使用单元范围对象(Range):Range对象代表工作表的某一单元格、某一行、某一列、某一选定区域或者某一三维区域。Range属性 Range (arg)其中arg为A1--样式符号,表示单个单元格或单元格区域。Range对象的主要属性和方法包括:Cells属性 Cells (row, col )(其中row为行号,col为列号)表示单个单元格。 ColumnWidth属性 指定区域中所有列的列宽。 Rowl3eight属性 指定区域中所有行的行宽。 Value属性 指定区域中所有单元格的值(缺省属性)。 Formula属性 指定单元格的公式,由A1--样式引用。 Select方法 选择范围。 Copy方法 将范围的内容复制到剪贴板。 C1earContents方法 清除范围的内容。 Delete方法 删除指定单元范围。 以上简要介绍了Excel对象模型中部分对象及其属性和方法,更详细的信息可参阅Excel 2000帮助中的"Microsoft Excel Visual Basic参考"一节的内容。实际上,Microsoft Office家族的Word,PowerPoint, Access和Project等应用程序都可以在VB应用程序中调用,其原理和步骤完全相同,只是其对象模型有所不同而已。2.5 VB编写组件基本介绍2.5.2 在VB中编写COM组件1、新建ActiveX DLL工程图2 ActiveX DLL工程注意:该类型工程缺省添加的不是窗体,而是类模块。2、修改工程属性菜单:工程-属性图3 菜单:工程-属性其中,工程名称就是组件的名称。3、修改类模块的性质图4 模块的性质说明:其中的Instancing是组件对象的实例化方式。5-MultiUse:可以创建多个实例。1-Private: 私有对象。不能在外部程序中创建它的实例,但公开其接口。4、定义对象的属性和方法与一般VB类相同。如添加以下代码,定义了该对象缺省接口的Hello方法:Public Sub Hello(sMsg As String)MsgBox sMsgEnd Sub如果定义为Private,则不是接口的方法,而是私有对象中的方法,对外不公开。5、编译生成COM组件菜单:文件-生成…6、调试和使用该COM组件(1) 在当前工程组中添加一个标准EXE的VB工程。菜单:文件-添加工程。(2) 在新工程中引用前面的ActiveX DLL工程。COM组件工程的名称将出现在组件选择对话框的列表中图5 引用工程(3)将新工程设置为启动工程。图6 启动工程(4)在新工程中添加代码,创建组件对象,调用其Hello方法。Private Sub Command1_Click()Dim myVBObj As MyVBCom.VBComObjectSet myVBObj = New MyVBCom.VBComObjectmyVBObj.Hello "Hello world."End Sub(5)设置断点,运行。3 Excel条件格式化工具的具体实现3.1插件接口方法当VB运行时,在Add-In菜单中装载组件以后,VB就会调用组件中IDTExtensibility对象中的OnConnection方法。在OnConnection方法里定义Application对象变量,并调用CommandBars.Add方法,就可在程序运行时加载工具栏。在“引用”对话框中选择“Microsoft Office 8.0 Object library”复选框,可以通过“对象浏览器”访问并浏览各种命令条对象。因为菜单和工具栏属于相同的对象库,它们都将通过CommandBarControl对象被引用。一个菜单条命令条可以包括几个菜单项,每个菜单项本身也是一个命令条,而且它又可以包括若干个菜单命令,每条命令依然是一个命令条。利用这种模式可以很容易地在开发环境中放置外接程序。使用commandBars集合对象用外接程序来添加命令栏和控件。在OnConnection事件过程定义Application、commandbars对象变量,此过程创建新的命令条按钮,并返回对它的对象变量,并定义commandbar上按键的事件。3.2 Excel插件的实现3.2.1插件实现的功能(1)在Excel中建立3列:姓名,平时,考试。并输入模拟数据。(2)选择所有学生姓名单元;(3)点击插件的按键,出现对话框。(4)在其中输入格式化的条件(类似于Excel的公式,只是将相对单元位置的表示方式,加了一个@符号。如:sum(@A1:@D1)>=4, 表示将A1到D1单元的数据相加,判断其和是否大于等于4。相对的含义是:对当前单元而言,求和的是A1到D1。如果当前单元的行列加了1,则求和的将是B2到E2。(即,求和的单元相对于当前单元的偏移量不变)。本例中输入:B2*30/100+C2*70/100<60(5)点击字体按键,选择字体、颜色等;(6)点击填充按键,选择填充色和模式;(7)点击“格式化”按键。3.2.2具体功能实现3.2.2.1设计器图7 设计器3.2.2.2 窗体的实现图8 窗体设置字体按钮:图9 设置字体按钮选择字体Private Sub cmdSetFont_Click()选择一个临时单元Dim rng As RangeSet rng = mExcelApp.Selection保存其原有字体设置Dim size, italic, underline, strikethrough, bold, color, style, namesize = rng.Font.sizeitalic = rng.Font.italicunderline = rng.Font.underlinestrikethrough = rng.Font.strikethroughbold = rng.Font.boldcolor = rng.Font.colorstyle = rng.Font.FontStylename = rng.Font.name使用Excel的标准对话框设置其字体mExcelApp.Dialogs(xlDialogFontProperties).Show保存其字体设置mFontsize = rng.Font.sizemFontitalic = rng.Font.italicmFontunderline = rng.Font.underlinemFontstrikethrough = rng.Font.strikethroughmFontBold = rng.Font.boldmFontColor = rng.Font.colormFontStyle = rng.Font.FontStylemFontName = rng.Font.name恢复其原有字体设置rng.Font.size = sizerng.Font.italic = italicrng.Font.underline = underlinerng.Font.strikethrough = strikethroughrng.Font.bold = boldrng.Font.color = colorrng.Font.FontStyle = stylerng.Font.name = nameEnd Sub单元填充按钮:图10 单元填充按钮Private Sub cmdBackGround_Click() 选择一个临时单元Dim rng As RangeSet rng = mExcelApp.Selection保留原有设置Dim clrIndex, pClrIndex, p, pClrp = rng.Interior.PatternclrIndex = rng.Interior.ColorIndexpClr = rng.Interior.PatternColorpClrIndex = rng.Interior.PatternColorIndex设置新的填充模式mExcelApp.Dialogs(xlDialogPatterns).Show保存设置mPattern = rng.Interior.PatternmColorIndex = rng.Interior.ColorIndexmPatternColor = rng.Interior.PatternColormPatternColorIndex = rng.Interior.PatternColorIndex恢复临时单元以前设置rng.Interior.Pattern = prng.Interior.ColorIndex = clrIndexrng.Interior.PatternColor = pClrrng.Interior.PatternColorIndex = pClrIndexEnd Sub保存单元格式设置的变量Private Sub cmdCancel_Click()Unload MeEnd SubPrivate Sub cmdFormat_Click()FormatSelectedCells Trim(txtFormula)MsgBox "格式化完成!"Unload MeEnd Sub3.2.2.3类模块设计:(类模块设计中包括“段”类和公式类)1 段类表示公式的一部分, 可能是字符串, 也可能是一个相对的位置.职责: 将相对位置转换为当前的绝对位置根据当前单元相对于公式原始位置的偏移, 计算绝对位置2 公式类职责:1. 将公式字符串转换为"段"对象(见: CSegment), 以表示其中的相对单元位置2. 根据提供的当前行列号, 得到当前的公式字符串.Option Explicit公式的原始位置Private mAbsRow As LongPrivate mAbsCol As Long组成公式的段Private mSegments As Collection设置公式字符串Public Sub SetFormula(ByVal sFormula As String, ByVal absRow As Long, ByVal absCol As Long)这个公式字符串有很多信息类型、范围 释放原有的段集Set mSegments = Nothing定义新的段集Set mSegments = New CollectionmAbsRow = absRowmAbsCol = absCol解析公式(查找其中的相对单元位置: 以@开头的单元)主要是从上面的 公式字符串里提取我们需要的 相对位置的信息Dim i As Integer, sChar As String, sSeg As StringDim blnInBrace As Boolean标志: 当前字符位置是否在引号中Dim blnGettingRelativeCell As Boolean标志: 正在提取相对单元位置Dim seg As CSegmentFor i = 1 To Len(sFormula)sChar = Mid(sFormula, i, 1)Select Case sCharCase """", "'" '如果是引号blnInBrace = Not blnInBrace '是否在引号内标志取反Case "@" '可能是相对单元位置If Not blnInBrace Then 不在引号嵌套中, 则确定是一个相对位置保存前面的段If sSeg <> "" ThenAddSegment sSeg, blnGettingRelativeCellEnd IfsSeg = ""blnGettingRelativeCell = TruesChar = "" End IfEnd SelectIf blnGettingRelativeCell And sChar <> "" ThenIf Not IsPositionChar(sChar) Then如果遇到非位置字符,说明相对位置的字符串已经结束AddSegment sSeg, True清空sSeg,为保存下一个段作准备sSeg = ""blnGettingRelativeCell = FalseEnd IfEnd IfsSeg = sSeg & sChar '将当前字符保存到sSeg中Next保存最后一个段(如果有的话)If sSeg <> "" ThenAddSegment sSeg, blnGettingRelativeCellEnd IfEnd Sub以上主要功能实现是:公式类字符串中的信息有很多类型、范围 需要从公式字符串里提取我们需要的相对位置信息。为相对位置的开始设置一个标记@ 并找到和判断相对位置信息进行保存。判断一个字符是否是表示单元位置的字符(字母或数字)Private Function IsPositionChar(sChar As String) As BooleanDim sTmp As StringsTmp = UCase(sChar)If sTmp >= "A" And sTmp <= "Z" ThensChar = sTmp '转换为大写IsPositionChar = TrueElseIf sTmp >= "0" And sTmp <= "9" ThenIsPositionChar = TrueEnd Function增加一个段对象Private Sub AddSegment(sSeg As String, blnIsRelative As Boolean)创建一个段对象Dim seg As CSegmentSet seg = New CSegmentseg.bRelativeCell = blnIsRelativeseg.sSegment = sSeg保存该段mSegments.Add segEnd Sub以下代码主要实现的是:将公式拆开 把范围内的公式解析成 一行一行的公式在计算再把公式和行计算的结果组合起来比如输入公式sum(@A1:@D1)>=4表示将A1到D1单元的数据相加,判断其和是否大于等于4。我选择的单元可能是从A1到D5的 那么就要将公式分成5个 A1-D1; A2-D2; A3-D3 ;A4-D4 ;A5-D5;这5个范围分别进行上面的公式 再将这5个公式组合起来根据当前位置, 取公式字符串Public Function GetFormula(ByVal nRow As Long, ByVal nCol As Long) As StringIf mSegments.Count = 0 Then Exit FunctionDim seg As CSegment, sFormula As StringFor Each seg In mSegmentssFormula = sFormula & seg.GetSegmentString(nRow - mAbsRow, nCol - mAbsCol)NextGetFormula = sFormulaEnd Function结 论我们根据COM组件和Office插件编程原理开发了本软件,其中实现了对条件格式判断的功能。软件虽小,但基本上能够满足输入格式判断的功能。用户需要的条件各种各样,有的是单个单元内的数值比较、有的是多个单元内的综合比较,比较方式可以用公式表示。但输入界面中只能输入指定的字符串。如何根据字符串进行单元内容的计算这是这个软件实现的难点。经指导老师王老师的帮助和讲解后终于可以完成输入格式判断的功能。由于时间仓促软件中还存在一些可以改进的地方。如:选择单元时只能选择列。如果要选择行,则在公式输入时的@相对地址上就要相应变化。如果我们增加两个窗口按钮:一个行单元选择,一个列单元选择。这样就可以解决选择行比较时需要修改相对地址的问题。参考文献[1] 赵建敏,郭庆.Visual Basic 6.0编程指南[M].北京:航空工业出版社,1999。[2] 李鸿吉.Visual Basic高级编程技术[M].北京:科学出版社,2003。[3] 李怀明.Visual Basic6.0中文版参考详解[M].北京:清华大学出版社,1999。[4] 黄志峰.Visual Basic高级编程实例精解[M].北京:北京国防工业出版社,2001。[5] 戴特(Deitel,M.H)[美].Visual Basic 6大学教程[M].北京:北京电子工业出版社,2003。[6] 卢毅.Visual Basic实例教程[M].北京:北京科学出版社,2001。[7] 布拉德利(Bradley,J.C.)[美],米尔斯波(Millspugh,A.C.)[美].Visual Basic 6.0高级编程[M].北京:清华大学出版社,2003。[8] 张德强.Visual Basic案例开发[M].北京:中国水利水电出版社,2005。[9] Dale Rogerson[美].COM技术内幕:微软组件对象模型[M].北京:清华大学出版社,1999。致 谢本文是在王燚老师的热情关心和指导下完成的,他渊博的知识和严谨的治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他表示我最衷心的感谢!最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!声 明本论文的工作是 2006年 3 月至2007年 6 月在成都信息工程学院 系完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。关于学位论文使用权和研究成果知识产权的说明本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括:(1)学校有权保管并向有关部门递交学位论文的原件与复印件。(2)学校可以采用影印、缩印或其他复制方式保存学位论文。(3)学校可以学术交流为目的复制、赠送和交换学位论文。(4)学校可允许学位论文被查阅或借阅。(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息工程学院。特此声明! 作者签名: 年 月 日第 PAGE 21 页 共 23 页第 22页 共 23 页第 23页 共 23 页
毕业论文设计,H2003032082_孙鹏_Excel条件格式化工具的设计与实现
3997
来源:
Licence:
联系:
分类:
平台:
环境:
大小:
更新:
标签:
免费下载
×
温馨提示
请用电脑打开本网页,即可以免费获取你想要的了。