摘要:Word已经成为最为普遍流行的排版工具,但是在科技文章中经常需要根据用户需要,嵌入一些根据条件参数变化的数学表达式,本文就是通过VBA扩展Word的排版功能解决这种问题。
关键词:VBA;Word;数学表达式;域
中图分类号:TP311.1文献标识码:A文章编号:1000-8136(2009)21-0158-02
DynamicMathExpressionEmbededinWord
LiQiang
Abstract:MSWordisaverypopulareditorialsoftware.Butinscientificalarticleweneedtoembedsomedaynamticmathexpressionwhichcanbechangedbyuser’sinput.ThispaperexpandsWord’sfunctionbyVBAwithresolutiontoresolvethisproblem.
Keywords:VBA;word;mathexpression;EQfield
作为微机桌面排版工具,Word软件受到了使用者的一致好评,由于具有非常友好的界面,强大的功能,使用方便等,能编辑大多数的文档等优势,Word软件已经成为编辑者的首选平台。另外Office软件的ActiveX技术的支持,使得Office软件之间可以互相结合,如Excel或Access可以嵌入它的图表和报表到Word当中,更使得Word得到广泛的应用。
对编辑人不利的是,多数编辑排版软件可以支持复杂的数学表达式的输入和编辑,如同Word中有数学表达式编辑器。但编辑后的文档是静态的,公式、函数等的参数和结果都必须提前设定,这样生成的文档因为不具有交互性,对不同参数需求的读者来说,该文档只能是重新编辑或枚举所有参数和结果供读者的查找。这样给编辑和读者都带来了极大的不利,势必造成资源的浪费和使用的困难,降低工作效率和大量的重复劳动。针对这类问题,我们提出了一种可参数化数学公式方案来解决此类问题,这就是采用VBA技术来扩展Word的功能,使文档更具有交互性。
1VBA实现动态嵌入数学表达式的方案
1.1解决方案思想
在Word文档中嵌入带有参量占位符的域表达式,然后根据用户输入,并根据特定运算函数得到结果,最后把得到赋值的变量替换到指定的占位符上。
1.2方案组件
域表达式[1]:是在Word文档中被指定位置需要嵌入带参量占位符的域数学表达式,将被程序替换成实际输入和运算结果值。从程序的角度看就是要被替换和修改的对象。
界面程序:是运行程序的接口部分,负责接受用户的参数,包括设定风格,并传给执行程序。
功能函数:是实现了该表达式意义的函数,用来根据输入参量,并指定运算并得到结果。
执行函数:是负责用指定的输入的参量和运算结果,替换相应的参量位占位符,并设定排版风格。
1.3方案的实现
要使这个方案能够落到实处,我们需要实现以上四个组件,下面将说明如何分别实现它们。
1.3.1域表达式的编辑
域表达式的编辑方法[1],只要在需要显示数学表达式的地方插入域表达式,然后再需要根据用户输入显示的地方或输出运算结果的地方插入设计好的占位符号,如<para1>,<para2>,…
<Result1>…。
例如:
f(<para1>)=<Result1>即f(x)=y
g(<para2>,<para3>)=<Result2>即g(x,y)=z
这里的“<paran>”和“<Resultn>”就是参量占位符。
1.3.2界面程序[3]
与用户交互的接口,一般设计对话框,通过友好的界面形式,接受用户的参数和风格设定,并启动功能函数和执行函数。
1.3.3功能函数
功能函数是表达式的数学意义的程序实现。
Pi(n)=6*(1/(1*1)+1/(2*2)+…+1/(n*n))
可以设定n为控制精度参数的求π近似解的函数。
1.3.4执行函数
先依次找到各个将要被替换变量的位置,以用户的输入参量和运算结果替换参量占位符号。然后再排版样式,生成新文档。
1.4程序的运行
首先,打开文档后,选择运行宏命令,指定要运行的宏,开始调用指定的界面程序,请求用户的输入。然后,根据输入参数和内设指定意义的功能函数,计算运算结果。最后,执行函数替换占位符,排版风格,生成新文档。
2应用举例
在科学计算中经常要计算定积分,现在以一个求f(x)=sin(x)为原函数的上限为参数的定积分。
数学表达式为:G(x)=xsin(x)dx
域表达式为:{EQ\i(0,x,sin(x))dx}
2.1操作步骤描述
2.2代码设计
积分函数f(x)的实现
PrivateFunctionf(ParameterAsSingle)
DimSumAsSingle
Sum=0
Fori=0ToParameterStep0.001
Sum=Sum+Sin(i)*0.001
Nexti
f=Sum
EndFunction
对话框执行按纽的功能实现
PrivateSubExecute_Click()
DimPara,ResultAsString
Para=Me.ParaTextBox.Text
Result=CStr(f(CSng(Para)))
WithActiveDocument.Content
.Find.ExecuteFindText:="<para>",
.ReplaceWith:=Para,Format:=True,
.Replace:=wdReplaceAll
.MoveStart
.Find.ExecuteFindText:="<Result>",
.ReplaceWith:=Result,Format:=True,
.Replace:=wdReplaceAll
EndWith
UnloadMe
EndSub
2.3运行演示
3结束语
本文主要的目的是使用VBA技术来使Word文档可以根据用户的需求,参数化输出文档的内容和样式,特别是给出了动态,可交互生成嵌有参数输入的数学表达式的文档的一个实际应用例子。现在相当多的用户使用Word进行自己的文档编辑和排版,我们的方法可以扩展Word的功能,提高文档的交互性,简化大量重复操作,甚至建立参数化文档,还能利用VBA进行其它Office工具的通信,只要它支持ActiveX技术。无纸化考试就是一个利用VBA实现程式化Word文档的一个最好的例子,因此它可以参数化考试内容,并给出评判,把考试转换为一个自动的、客观的、基于VBA的考试系统。
目前这种方法的实现和应用还只是处于初步阶段,以后还有很多方面的工作可以做:如可以嵌入电子表格,导入报表,对文档加密,查询数据库等等工作。进一步提高交互性,可根据用户的参数化来改变排版的样式等等。
参考文献
1林克明.在WORD中EQ域的使用方法及技巧.三明高等专科学校学报,2001.02
2邵小兵、潘林.利用VBA实现WORD自动排版.办公自动化,2005.9
3林丕源.VBA在Word文档中的应用.现代计算机,2001.9
4景疆.Office2000常用对象模型的VBA编程.办公自动化,2005.8
5殷伟.Word中编排复杂数理表达式又一招.电脑知识与技术,1998.10
6杨晓亮.WordVBA高效排版范例应用.中国青年出版社,2005.11