毕业设计(论文)格式化EXCEL表格的工具的设计与测试

上传人:仙*** 文档编号:27671538 上传时间:2021-08-19 格式:DOC 页数:23 大小:245.02KB
返回 下载 相关 举报
毕业设计(论文)格式化EXCEL表格的工具的设计与测试_第1页
第1页 / 共23页
毕业设计(论文)格式化EXCEL表格的工具的设计与测试_第2页
第2页 / 共23页
毕业设计(论文)格式化EXCEL表格的工具的设计与测试_第3页
第3页 / 共23页
点击查看更多>>
资源描述
格式化 EXCEL 表格的工具的设计与测试 摘要 Excel 是一个在各个领域中被广泛应用的电子表格软件。通过它,我们可 以很好的组织管理数据,对数据进行统计分析等。在实际应用中,我们发现经 常需要根据某种特定的条件,特殊显示部分数据。虽然这种功能可以通过 Excel 宏来实现,但每次编写类似的代码使人感觉跟不方便。Excel 同其它 Office 组件一样,提供了通过插件进行功能扩展的可能。通过编写和安装插件, 我们可以几乎任意地扩展 Excel 的功能,为我们的工作提供极大的便利。本文 详细介绍了一个 Excel 条件格式化软件的设计和实现。该软件使用 COM 组件技 术,根据 Office 插件的接口要求,设计了一个 Excel 的插件。该插件在 Excel 应用程序的窗口中增加一个工具栏,并在其上创建了一个按键,用于打开格式 化设置窗口。软件可以对用户输入的、用字符串表达的判断条件进行计算,并 根据计算结果,将满足条件的单元数据设置为用户选择的特殊格式(字体、颜 色、字号、修饰等) 关键词:Excel 插件;COM 组件;接口 The Design and Implementation of the Conditionally Formatting Tool for Excel Abstract Excel 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 页 1 引言 .1 2 COM 组件的实现技术 .1 2.1 COM 组件技术 .1 2.2 接口 .2 2.3 插件技术 .3 2.4 EXCEL 对象模型 .4 2.4.1 Excel 对象模型的类以及之间的关系 .4 2.4.2 使用 Excel.5 2.4.3 引用 Application 对象 .5 2.4.4 Application 对象常用的属性、方法 .6 2.4.5 使用工作薄 .6 2.4.6 使用工作表 .8 2.5 VB 编写组件基本介绍 .9 2.5.2 在 VB 中编写 COM 组件 .9 3 EXCEL 条件格式化工 具的具体实现 .12 3.1 插件接口方法 .12 3.2 EXCEL插件的实现 .13 3.2.1 插件实现的功能 .13 3.2.2 具体功能实现 .13 参考文献 .21 第 1 页 共 23 页 Excel 条件格式化工具的设计与实现 1 引言 我们生活的这个世界是丰富多彩的,几乎所有的知识都来自于视觉。也许 无法记住一连串的数字,以及它们之间的关系和趋势。但是可以很轻松地记住 一幅图画或者一个曲线。Excel 就具有许多高级的制图功能,同时使用起来也 非常方便。它不仅可以用来制作电子表格、完成许多复杂的数据运算,还可以 进行数据的分析和预测。Excel 文档是实际工作学习中最为常用的文档格式之一, 为了增强 Word、Excel 等软件的自动化能力,人们开发了各种提高办公效率的 软件,它们大多数实用、专业性强。为了避免用户做大量重复性的工作,提高 Office 办公效率,达到提高其实用功能的目的,可根据具体工作内容要求,编 写出最具本地化、个性化、最合适的软件。 2 COM 组件的实现技术 2.1 COM 组件技术 COM 是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发 的一种新的软件开发技术。在 COM 构架下,人们可以开发出各种各样的功能专 一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的 好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升 级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系 统扩展到网络环境下;COM 与语言,平台无关的特性使所有的程序员均可充分 发挥自己的才智与专长编写组件模块。 COM 是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序, 它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的 COM 组 件就如同开发动态的,面向对象的 API。多个 COM 对象可以连接起来形成应用 程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序 的情况下被卸下或替换掉。Microsoft 的许多技术,如 ActiveX, DirectX 以及 OLE 等都是基于 COM 而建立起来的。并且 Microsoft 的开发人员也大量使用 COM 组件来定制他们的应用程序及操作系统。COM 所含的概念并不止是在 Microsoft Windows 操作系统下才有效。COM 并不是一个大的 API,它实际上象结构化编程 及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发 人员均可以遵循“COM 方法” 。一个应用程序通常使由单个的二进制文件组成的。 第 2 页 共 23 页 当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之 前,应用程序一般不会发生任何变化。操作系统,硬件及客户需求的改变都必 须等到整个应用程序被重新生成。目前这种状况已经发生变化。开发人员开始 将单个的应用程序分隔成单独多个独立的部分,也既组件。这种做法的好处是 可以随着技术的不断发展而用新的组件取代以有的组件。此时的应用程序可以 随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快 速的建立全新的应用。 传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一 个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不 同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的 二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只 有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以 构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应 用程序的组件中的某个用新的版本替换掉即可。 COM 即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序 的一个规范,说明了如何可动态交替更新组件。使用组件的优点:组件架构的 一个优点就是应用可以随时间的流逝而发展进化。除此之外,使用组件还有一 些可以使对以有应用的升级更加方便和灵活的优点,如应用的定制,组件库以 及分布式组件等。使用组件的种种优点直接来源于可以将它们动态的插入或卸 出应用。为了实现这种功能,所有的组件必须满足两个条件:第一,组件必须 动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组 件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。 2.2 接口 由于组件向外部隐藏了其内部的细节,因此客户要使用组件时就必须通过 一定的机制,也就是说要通过一定的方法来实现客户与组件之间的通信,这就 需要接口。所谓接口就是组件对外暴露的、向外部客户提供服务的“连接点” 。 外部的客户见不到组件内部的细节,它所能看到的只是接口,客户也是通过接 口来获取组件提供的服务。这有点像 OSI 网络协议分层模型,每一层就像一个 组件,它内部的实现细节对于其他层是不可见的;而每一层通过“服务接入点” 向其上层提供服务,这就像这里所说的接口。一般来说,接口总是固定的,也 是公开的。组件的开发人员要实现这些接口,而客户则通过接口获得服务。正 是接口的这种固定和公开,才使得组件和客户能够在不了解对方的情况下达成 一致。 第 3 页 共 23 页 接口提供了两个不同对象间的一种连接。实际上计算机程序是通过一组函 数而连接起来的。这组函数实际上就定义了程序中不同部分的接口。DLL 的接 口就是它所输出的那些函数。COM 中的接口也涉及到一组由组件实现并提供给 客户使用的函数。对于 COM 来说,接口是一个包含一个函数指针数组的内存 结构。第一个数组包含的是一个由组件所实现的函数的地址。对于 COM 而言, 接口就是此内存结构,其它东西均是一个 COM 并不关心的实现细节。 接口的作用:在 COM 中接口就是一切。对于客户来说,一个组件就是一 个接口集。客户只能通过接口才能同 COM 组件打交道。从整体上讲,客户对 于一个组件可以说是知之甚少的。在某些情况下,客户甚至不必知道一个组件 所提供的所有接口。 可复用应用程序架构:说组件仅仅只是接口的实现细节当然有点言过其实。 不管怎么说,一个未被实现的接口实际上什么也不能完成。但是组件可从应用 程序中删除并可用另外一个组合来取代之。只要新的组件支持同组件相同的接 口,那么整个应用程序将仍然能够工作。单个的组件并不能对整个应用程序产 生决定的作用。相反,用以连接组件的接口将对整个应用程序产生决定性的作 用。只要接口保持不变,那么组件可以任意地更换。 接口同木板房中的大梁非常类似。这些大梁决定了整个房屋的结构。同样 可以将应用程序所用的组件替换掉,这样应用程序的行为将会发生变化,但从 结构上讲,整个应用程序并没有发生任何变化。使用组件来构造应用程序的最 大的优点在于可以复用应用程序的结构。如果接口设计得好的话,将可以得到 可复用极高的结构。当然使用接口除了可以设计出可复用的结构外,还有其它 若干优点。 COM 接口的其它优点:接口使得客户可以用同样的方式来处理不同的组件。 这种能力就被称作是多态。这些优点是通过接口将某个特定的行为封闭起来而 获得的。 2.3 插件技术 插件是一类特殊的组件。它的目的不是为一般应用程序使用,而是专为特 定的应用程序使用。插件一般在宿主应用程序上添加控制项,如菜单、工具按 键等。插件响应宿主程序中对这些项目的操作,并对宿主程序中的数据进行特 定操作。 插件是一种遵循一定规范的应用程序接口编写出来的程序。插件是一类特 殊的组件。它的目的不是为一般应用程序使用,而是专为特定的应用程序使用。 第 4 页 共 23 页 插件的本质是在不修改程序主体的情况下对软件功能进行加强,当插件的接口 被公开时,任何公司或个人都可以自己制作插件来解决一些操作上的不便或增 加一些功能。插件还可以支持多人合作开发,不同的功能可以由不同的人来完 成,而且由于不同插件之间互不影响,方便程序的调试和纠错。插件一般在宿 主应用程序上添加控制项,如菜单、工具按键等。插件响应宿主程序中对这些 项目的操作,并对宿主程序中的数据进行特定操作。插件类型从广义的范围来 看,插件有以下三种类型: 1类似批命令的简单插件。事实上这种插件的自由度非常低。运行这种插 件后,会一步步要求用户进行选择/输入,最后根据用户的输入来执行一系列事 先定义好的操作。这种插件一般是文本文件。功能比较单一,可扩展性极小。 优点是插件做起来非常方便,即使是对程序设计了解不多的人也可以制作。 2使用一种特殊的脚本语言来实现的插件。这种插件比较难写,需要软件 开发者自己制作一个程序解释内核。比如微软惹了很多麻烦的宏就是这种类型 的。有一套著名的 Office 辅助工具就是完全用 Office 内置的 VBScript 写成的。 这种方法的优点在于无需使用其它工具来制作插件,软件本身就可以实现,普 遍出现于各种办公自动化软件中。 3利用已有的程序开发环境来制作插件。例如 PhotoShop 等软件使用的方 法。使用这种方法的软件在程序主体中建立了多个自定义的接口,使插件能够 自由访问程序中的各种资源。这种插件的优势在于自由度极大,可以无限发挥 插件开发者的创意,这种插件是狭义范围的插件,也是真正意义上的插件。而 这种插件机制的编写相对复杂,对于插件接口之间的协调比较困难。 2.4 EXCEL 对象模型 2.4.1 Excel 对象模型的类以及之间的关系 Excel 组件中定义了大量的类。下图显示了我们在软件开发中使用到的一些 主要的类和它们之间的关系。 第 5 页 共 23 页 Aplication WorkBok*1 WorkShet*1 Chart*1Range* 1 Font*1 图 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 第 6 页 共 23 页 或直接声明为 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 Object Set VBExcel=CreateObject (Excel.Application) X=VBExcel. Evaluate (3+5*(cos (1/log (99. 9) 在 VB 应用程序中使用 Excel 应用程序,就是通过 Application 对象的属 性、方法来获得其它 Excel 对象,如工作簿、工作表、单元等待。下面分类给 出其中常用的属性和方法。 第 7 页 共 23 页 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:生成、保存、关闭工作簿 第 8 页 共 23 页 Dim VBExcel As Excel.Application Set VBExcel= CreateObject(Excel.Application) With VBExcel .Workbooks.Add With ActiveWorkbook .Save AsC: Temp OUTPUT.XLS .Close End With Quit End With 2.4.6 使用工作表 Sheets 集合表示工作簿中所有的工作表。可以通过 Sheets 集合来访问、 激活、增加、更名和删除工作表。一个 Worksheet 对象代表一个工作表。 Worksheets 属性 返回 Sheets 集合。 Name 属性 工作表更名。 Add 方法 创建新工作表并将其添加到工作簿中。 Select 方法 选择工作表。 Copy 方法 复制工作表。 Move 方法 将指定工作表移到工作簿的另一位置。 Delete 方法 删除指定工作表。 PrintOut 方法 打印工作表 示例:将 C 盘工作簿中的工作表复制到 A 盘工作簿中 Dim VBExcel As Excel.Application Set VBExcel=CreateObject(Excel.Application) With VBExcel .Workbooks.Open C:TempOUTPUT.XLS .Workbooks.OpenA:OUTPUT1.XLS .Workbooks(OUTPUT.XLS).Sheets (Sales).Copy .Workbooks(OUTPUT1.XLS) .Workbooks(OUTPUT1.XLS).Save .Workbooks(OUTPUT.XLS).Close .Workbooks(OUTPUTI.XLS).Close 第 9 页 共 23 页 .Quit End 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 工程 第 10 页 共 23 页 图 2 ActiveX DLL 工程 注意:该类型工程缺省添加的不是窗体,而是类模块。 2、修改工程属性 菜单:工程属性 图 3 菜单:工程属性 其中,工程名称就是组件的名称。 3、修改类模块的性质 第 11 页 共 23 页 图 4 模块的性质 说明:其中的 Instancing 是组件对象的实例化方式。 5-MultiUse:可以创建多个实例。 1-Private: 私有对象。不能在外部程序中创建它的实例,但公开其接口。 4、定义对象的属性和方法 与一般 VB 类相同。如添加以下代码,定义了该对象缺省接口的 Hello 方法: Public Sub Hello(sMsg As String) MsgBox sMsg End Sub 如果定义为 Private,则不是接口的方法,而是私有对象中的方法,对外不公 开。 5、编译生成 COM 组件 菜单:文件生成 6、调试和使用该 COM 组件 (1) 在当前工程组中添加一个标准 EXE 的 VB 工程。 菜单:文件添加工程。 第 12 页 共 23 页 (2) 在新工程中引用前面的 ActiveX DLL 工程。 COM 组件工程的名称将出现在组件选择对话框的列表中 图 5 引用工程 (3)将新工程设置为启动工程。 图 6 启动工程 (4)在新工程中添加代码,创建组件对象,调用其 Hello 方法。 Private Sub Command1_Click()Dim myVBObj As MyVBCom.VBComObject Set myVBObj = New MyVBCom.VBComObject myVBObj.Hello Hello world. 第 13 页 共 23 页 End Sub (5)设置断点,运行。 3 Excel 条件格式化工具的具体实现 3.1 插件接口方法 3.2 Excel 插件的实现 3.2.1 插件实现的功能 3.2.2 具体功能实现 3.2.2.1 设计器 图 7 设计器 3.2.2.2 窗体的实现 第 14 页 共 23 页 图 8 窗体 设置字体按钮: 图 9 设置字体按钮 选择字体 Private Sub cmdSetFont_Click() 选择一个临时单元 Dim rng As Range Set rng = mExcelApp.Selection 保存其原有字体设置 Dim size, italic, underline, strikethrough, bold, color, style, name size = rng.Font.size italic = rng.Font.italic underline = rng.Font.underline strikethrough = rng.Font.strikethrough bold = rng.Font.bold color = rng.Font.color style = rng.Font.FontStyle 第 15 页 共 23 页 name = rng.Font.name 使用 Excel 的标准对话框设置其字体 mExcelApp.Dialogs(xlDialogFontProperties).Show 保存其字体设置 mFontsize = rng.Font.size mFontitalic = rng.Font.italic mFontunderline = rng.Font.underline mFontstrikethrough = rng.Font.strikethrough mFontBold = rng.Font.bold mFontColor = rng.Font.color mFontStyle = rng.Font.FontStyle mFontName = rng.Font.name 恢复其原有字体设置 rng.Font.size = size rng.Font.italic = italic rng.Font.underline = underline rng.Font.strikethrough = strikethrough rng.Font.bold = bold rng.Font.color = color rng.Font.FontStyle = style rng.Font.name = name End Sub 单元填充按钮: 图 10 单元填充按钮 Private Sub cmdBackGround_Click() 选择一个临时单元 Dim rng As Range Set rng = mExcelApp.Selection 保留原有设置 Dim clrIndex, pClrIndex, p, pClr 第 16 页 共 23 页 p = rng.Interior.Pattern clrIndex = rng.Interior.ColorIndex pClr = rng.Interior.PatternColor pClrIndex = rng.Interior.PatternColorIndex 设置新的填充模式 mExcelApp.Dialogs(xlDialogPatterns).Show 保存设置 mPattern = rng.Interior.Pattern mColorIndex = rng.Interior.ColorIndex mPatternColor = rng.Interior.PatternColor mPatternColorIndex = rng.Interior.PatternColorIndex 恢复临时单元以前设置 rng.Interior.Pattern = p rng.Interior.ColorIndex = clrIndex rng.Interior.PatternColor = pClr rng.Interior.PatternColorIndex = pClrIndex End Sub 保存单元格式设置的变量 Private Sub cmdCancel_Click() Unload Me End Sub Private Sub cmdFormat_Click() FormatSelectedCells Trim(txtFormula) MsgBox 格式化完成! Unload Me End Sub 3.2.2.3 类模块设计: (类模块设计中包括“段”类和公式类) 1 段类 表示公式的一部分, 可能是字符串, 也可能是一个相对的位置. 职责: 将相对位置转换为当前的绝对位置 根据当前单元相对于公式原始位置的偏移, 计算绝对位置 2 公式类 第 17 页 共 23 页 职责: 1. 将公式字符串转换为段对象(见: CSegment), 以表示其中的相对单元位置 2. 根据提供的当前行列号, 得到当前的公式字符串. Option Explicit 公式的原始位置 Private mAbsRow As Long Private 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 Collection mAbsRow = absRow mAbsCol = absCol 解析公式(查找其中的相对单元位置: 以开头的单元) 主要是从上面的 公式字符串里提取我们需要的 相对位置的信息 Dim i As Integer, sChar As String, sSeg As String Dim blnInBrace As Boolean 标志: 当前字符位置是否在引号中 Dim blnGettingRelativeCell As Boolean 标志: 正在提取相对单元位置 Dim seg As CSegment For i = 1 To Len(sFormula) sChar = Mid(sFormula, i, 1) Select Case sChar Case , 如果是引号 blnInBrace = Not blnInBrace 是否在引号内标志取反 Case 可能是相对单元位置 If Not blnInBrace Then 第 18 页 共 23 页 不在引号嵌套中, 则确定是一个相对位置 保存前面的段 If sSeg Then AddSegment sSeg, blnGettingRelativeCell End If sSeg = blnGettingRelativeCell = True sChar = End If End Select If blnGettingRelativeCell And sChar Then If Not IsPositionChar(sChar) Then 如果遇到非位置字符,说明相对位置的字符串已经结束 AddSegment sSeg, True 清空 sSeg,为保存下一个段作准备 sSeg = blnGettingRelativeCell = False End If End If sSeg = sSeg & sChar 将当前字符保存到 sSeg 中 Next 保存最后一个段(如果有的话) If sSeg Then AddSegment sSeg, blnGettingRelativeCell End If End Sub 以上主要功能实现是:公式类字符串中的信息有很多类型、范围 需要从公 式字符串里提取我们需要的相对位置信息。为相对位置的开始设置一个标记 并找到和判断相对位置信息进行保存。 判断一个字符是否是表示单元位置的字符(字母或数字) Private Function IsPositionChar(sChar As String) As Boolean Dim sTmp As String sTmp = UCase(sChar) 第 19 页 共 23 页 If sTmp = A And sTmp = 0 And sTmp =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 String If mSegments.Count = 0 Then Exit FunctionDim seg As CSegment, sFormula As String For Each seg In mSegments sFormula = sFormula & seg.GetSegmentString(nRow - mAbsRow, nCol - mAbsCol) Next GetFormula = sFormula End Function 第 23 页 共 23 页 结 论 我们根据 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。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸下载 > CAD图纸下载


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!