本发明涉及一种编制公式插入文档的方法及计算机存储介质,特别是涉及一种基于matlab编制公式插入文档的方法及计算机存储介质。
背景技术:
程序开发可以编制专业的文档。采用高级程序设计语言如c#、visualbasic等进行计算相关的软件开发时,可以通过程序代码方便地定义文档页面、字体以及段落间距等格式,生成专业的文档模板,运行程序即可按固定格式及定义的模板自动生成例如计算报告书等文档。
但是,采用高级计算语言matlab脚本编制文档尚存在空白。鉴于matlab软件接近数学表达式的自然化语言风格、高效的数值计算及符号计算功能,并且包含控制语句、函数、结构体、输入和输出等编程特点,matlab已经深入渗透到工程计算和科学研究等各个领域。matlab用户往往通过编制脚本计算程序完成计算任务,但是将计算过程及结果写入计算报告书等文档时存在下列缺陷:(1)无法将计算过程所涉及的数学公式直接导入文档,(2)无法将计算过程的中间步骤及最终结果直接导入文档。此时,用户在编制计算报告书等文档时需要(1)人工重复编写数学公式、(2)人工保存中间步骤结果并重复导入报告书,这导致用户编写计算报告书涉及大量人工重复劳动、工作效率低下。
技术实现要素:
发明目的:本发明要解决的技术问题是提供一种基于matlab编制公式插入文档的方法及计算机存储介质,克服采用matlab进行数学或工程计算并编写文档时存在的不足之处,避免了数学公式及计算结果的人工重复编写,提高了工作效率。
技术方案:本发明所述的基于matlab编制公式插入文档的方法,所运行的系统中安装有matlab软件和文档服务器软件,包括以下步骤:
(1)链接matlab脚本程序与文档服务器;
(2)在matlab脚本程序中设定文档的格式;
(3)将公式中的特殊字符进行进制转换,并编写公式字符串矩阵;
(4)将所述的字符串数组按专业格式生成公式并插入编辑区域。
进一步的,步骤(1)中的链接包括以下步骤:
(1)链接matlab脚本程序与文档服务器,若文档服务器已经打开,则返回文档句柄,否则,创建报告书服务器并返回文档句柄;
(2)保存所述文档。
进一步的,步骤(2)中所述的文档的格式包括了光标初始位置、页面大小、纸张样式、排列方向、上下左右空白区域、首行缩进、行间距、文本对齐方式和文字大小。
进一步的,步骤(3)的具体过程为:将特殊字符所采用的十六进制编码转换为十进制编码,再转换成字符,与常规字符合并形成字符串矩阵。
进一步的,步骤(4)的具体过程为:将所述字符串矩阵按专业格式转换为数学公式,脚本程序调用数学集合对象,在定义的公式编辑区域插入所述的字符串矩阵。
进一步的,所述的matlab软件版本不低于r2015a,所述的文档服务器软件包括了word2010、word2013、wps2010和wps2013。
本发明所述的计算机存储介质,其上存储有计算机程序,所述程序被计算机处理器执行时实现以上任一项所述的方法。
有益效果:本发明能够将matlab脚本中的数学公式定义为字符串矩阵,特殊字符采用十六进制编码,将其转换为十进制编码后与一般字符合并为字符串矩阵,调用数学集合对象自动生成专业的数学公式,将数学公式直接导入文档。通过上述方法,本发明建立了matlab与文档接口之间的数据通讯,提供了一种在matlab脚本中快速编制专业数学公式并插入文档中的技术解决方案,避免了人工重复编写,方便了人们工作和使用。
附图说明
图1是本方法的整体流程图。
具体实施方式
本方法使用的matlab软件版本不低于r2015a,文档服务器版本包括了word2010、word2013、wps2010以及wps2013,本实施例采用的数学公式测试用例为:常规数学表达式eq.1(温度单位转换)、eq.2(含上下标)、eq.3(平方根)、eq.4(三次根号)、eq.5(n次根)、eq.6(公式阵列)、eq.7(求和符合)、eq.8(积符号)、eq.9(分段函数)、eq.10(矩阵matrix)以及eq.11(极限),具体实施方式如图1所示。
s1:链接matlab脚本控制程序与计算报告书服务器,判断报告书服务器是否已经打开,若已打开,在打开的word报告书服务器中进行操作,否则打开word报告书服务器。在matlab的脚本文件窗口中写入如下的原始代码:
s2:设定计算报告书格式,脚本文件原始代码如下所示:
%%设定光标位置从头开始
content=document.content;
selection=word.selection;
paragraphformat=selection.paragraphformat;
%%设定页面大小
document.pagesetup.papersize='wdpapera4';%设置纸张样式
document.pagesetup.orientation='wdorientportrait';%排列方式为垂直方向
document.pagesetup.topmargin=57*1.2637;%单位像素
document.pagesetup.bottommargin=57*1.2637;
document.pagesetup.leftmargin=57*1.5821;
document.pagesetup.rightmargin=57*1.5821;
document.pagesetup.headerdistance=50;
document.paragraphs.firstlineindent=25;%首行缩进
document.activewindow.activepane.view.type='wdprintview';%设置视图方式为页面
s3、定义数学公式字符串数组并插入到特定的编辑区域,原始代码如下所示:
%%第一段:描述性文字
pa11=['以下公式仅供测试'];
selection.text=pa11;
selection.font.size=14;
selection.font.bold=0;
selection.paragraphformat.alignment='wdalignparagraphjustify';%两端对齐
selection.paragraphformat.linespacingrule='wdlinespacesingle';%单倍行距
selection.paragraphformat.firstlineindent=30;%首行缩进
selection.movedown;
selection.typeparagraph;
%%示例,插入公式eq.1:温度单位转换
objrange=selection.range;
objrange.text='celsius=(5/9)(fahrenheit–32)';
objrange=selection.omaths.add(objrange);
objeq=objrange.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,插入公式eq.2:公式含上下标
objrange=selection.range;
objrange.text='σ_1(l_x/2,l_y/2)=n_sd/(l_xl_y)+(m_x(l_y/2))/i_x+(m_y(l_x/2))/i_y+2^2';
objrange=selection.omaths.add(objrange);
objeq=objrange.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,插入公式eq.3:平方根(16进制编码221a)
objrange=selection.range;
objrange.text=[char(hex2dec('221a'))'(x_1^(y_1^3)+y^2)+13^6'];
objrange2=objrange.omaths.add(objrange);
objeq=objrange2.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,插入公式eq.4:3次根号(16进制编码0x222a)
objrange=selection.range;
objrange.text=[char(hex2dec('221a'))'(3&x+13)+13'];
objrange2=objrange.omaths.add(objrange);
objeq=objrange2.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,插入公式eq.5:n次根号radicalofordern
objrange=selection.range;
objrange.text=[char(hex2dec('221a'))'(n&x^(2^3)+y^2)+13'];
objrange2=objrange.omaths.add(objrange);
objeq=objrange2.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,插入公式eq.6:输出公式阵列,由10个公式组成formm=1:1:10
objrange=selection.range;
objrange.text=['x^2+'num2str(mm)'=y'];
objrange2=objrange.omaths.add(objrange);
objrange2.omaths.buildup;
selection.endkey;
selection.typeparagraph;
end
%%示例,插入公式eq.7:求和符号(16进制编码0x2211)
objrange=selection.range;
objrange.move(6);
objrange0=document.range(objrange.start,objrange.start);
objrange.insertsymbol(8721,0,1);
objrange.move(6);
objrange.insertafter('_(i=1)^n');
objrange.move(6);
objrange.insertsymbol(hex2dec('2592'),0,1);%placeholder
objrange.move(6);
objrange.insertafter('i=n(n+1)/2');
objrange1=document.range(objrange0.start,objrange.end);
objrange2=objrange1.omaths.add(objrange1);
objeq=objrange2.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,插入公式eq.8:积(16进制编码0x220f),有上下标
objrange=selection.range;
objrange.move(6);
objrange0=document.range(objrange.start,objrange.start);
objrange.insertsymbol(8719,0,1);%sum
objrange.move(6);
objrange.insertafter('_(i=1)^');%下标
objrange.insertafter(char(8734));%上标无穷大
objrange.move(6);
objrange.insertsymbol(9618,0,1);%placeholder
objrange.move(6);
objrange.insertafter(['1/(i+1)']);
objrange1=document.range(objrange0.start,objrange.end);
objrange2=objrange1.omaths.add(objrange1);
objeq=objrange2.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,公式eq.9:分段函数
objrange=selection.range;
objrange.text=['abs(x)={'char(hex2dec('2588'))'(x,x>0@0,x=0@-x,x<0)'char(hex2dec('2524'))];
objrange2=objrange.omaths.add(objrange);
objeq=objrange2.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,插入公式eq.10:矩阵matrix
objrange=selection.range;
objrange.text=[char(hex2dec('25a0'))'(1&2&3@4&5&6)'];
objrange2=objrange.omaths.add(objrange);
objeq=objrange2.omaths(1);
objeq.buildup;
selection.endkey;
selection.typeparagraph;
%%示例,插入公式eq.11:极限
objrange=selection.range;
txt1='lim_(n→∞)(1/(n+1))=0';
objrange.text=txt1;
objrange2=objrange.omaths.add(objrange);
objeq=objrange2.omaths(1);
objeq.buildup;
%%保存并退出
document.activewindow.activepane.view.type='wdprintview';%设置页面视图
document.save;%保存文档
document.close;%关闭文档
word.quit;%退出word服务器
在matlab脚本程序窗口中写完上述代码后,然后运行matlab的编译器,生成了包含所编制公式的文档。
本发明的实施例还提供了一种计算机存储介质,其上存储有计算机程序。当所述计算机程序由处理器执行时,可以实现前述控制的方法。例如,该计算机存储介质为计算机可读存储介质。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。