针对于整个联合Word的API生成文档的整个内容,在这先附上Word自动生成内容介绍完成以后的功能视频(12M),也就是在这个系列的内容讲述完成之后,能够达到的效果。
这里也是直接给出一个预期,如果大家有兴趣可以接着看,没有兴趣的可以直接取关了,可以大大节约大家的时间。基于Simulink生成Word文档的模型以及参数将于文末给予百度网盘链接(科技技术日新月异,笔者的MATLAB也更新到2017B了,当然,脚本还是兼容的,只是模型可能大家打不开)。有朋友吐槽视频的音质效果太差,大家可以将就着听,如果等赞赏够买一个耳麦了,大家也能听得更清楚了,哈哈
本期内容
Word导入Simulink的Annotation
Word光标的使用
Word文档的Style(字体与段落的配合)设置
上一期,我们讲解了Word文档页面设置。在打开Word后,对页面进行设置,接下来要写一点东西,那么这一期就讲一讲字体及段落进行相应的设置。在这先附上本期完成以后的功能视频(4.5M)
由于第一期与第二期讲的是一个比较简单的操作,这里有必要先对Word的布局进行一个细致的讲解
如上图所示,整个打开的程序为一个Word的应用,即为Application,程序应用里面下一层就是打开的文档,程序接口对应为Application.Document[1]。文档具备有内容,程序接口对应为Application.Document.Content[2]。同时,打开Word以后,鼠标的位置只属于应用的光标,程序接口对应为Application.Selection。当然,对应于上两期,可以将Application更名为Word。这里让大家把Word设置成英文的目的,是为了在后面进行设置时,想要设置什么属性,可大胆的用公式去套
Word.Document.属性=属性值
Word.Document.Content.属性=属性值
Word.Selection.属性=属性值
当然,上面的属性具有层层嵌套的特点,要找到对应的属性才能达到想要的结果,如果大家要问属性在哪,Word界面上工具栏中那么例如Font,Paragraph,以及其所从属的界面中的可以更改的所有项(想想讲GUI的时候动态文本框,就是那个东西),就是属性了。
首先,在Matlab的Command Window 打开Word,使其接口程序名字为Word,并使其可见,并新建一个默认的空白文档。
Word=actxGetRunningServer('Word.Application');
Word=actxserver('Word.Application');
Word.Visible=1;
Document=Word.Document.Add;
Document.PageSetup.TopMargin=72;
Document.PageSetup.BottomMargin=72;
Document.PageSetup.LeftMargin=42;
Document.PageSetup.RightMargin=48;
Content=Document.Content;%获取当前打开文件内容
Selection=Word.Selection;%获得word光标对象
代码讲解:得到文档内容与光标位置(默认为Range(0,0),即文档的开头)。在这里给大家普及一下,Range也是一个非常有用的位置选定函数[1],其代表打开的Content中选定的内容范围,其语法为Range(Start,End),其中Start及End代表文档中的字符所在的数,由0至文档最末,在设置格式时可以用光标来选中指定的内容(文字,图表等)进行更改,也就是它在起作用了,在讲述的整个Word生成中,笔者不会用到这个函数,故有兴趣可去官网深究[3]。
在Word的主界面中,我们可以看到字体(Font)与段落(Paragraph)及样式(Styles)三个常用菜单,对于写过具有格式文档,在文档中设置好字体样式、段落格式,然后用格式刷来各种刷的回忆应该是有的。
如上图所示,在对选中的Style[4]进行Modify时,就会出现各种设置,会发现,Font和Paragraph是Style的子设置项(注意:这个Style只存在于你当前设置的电脑上,当保存的文档用于其他电脑时,将不起作用,如果是要打印,可以先保存为PDF)。这里笔者用这个Style来设置格式的原因是在同一个文档中,新建的Style具有复用性,减少代码量。先来讲讲Font及Paragraph的常用属性
一、Font常用属性及其属性值
首先,上一张打开可以设置的Font界面
常用的可设置属性如下:
当然,艺术字体大家也可以设置,这个不常用,可参见官网[9]
二、Paragraph常用属性及其属性值
首先,上一张打开可以设置的Paragraph界面
常用的可设置属性如下:
’wdLineSpace1pt5‘
‘wdLineSpaceAtLeast’
‘wdLineSpaceDouble‘
’wdLineSpaceExactly’
‘wdLineSpaceMultiple‘
’wdLineSpaceSingle’
其他内容请详参官网[14]
在自定义的函数中写下以下代码:
代码讲解:此处为定义三个样式Style1,Style2,Style3,其中,Styles对象方法(Word中的对象有方法-Methods和属性-Properties两种归类)只有两个操作:
Styles.Add(Style Name);添加名为Style Name的样式
Styles.Delete(Style Name);删除名为Style Name的样式
但是添加后的Style能够设置各种属性[15]
Style1:20号宋体,加粗,黑色,一级标题,段落居左显示
Style2:16号新罗马字体,不加粗,黑色,正文文本,段落居中显示
Style2:16号宋体,不加粗,黑色,正文文本,段落居左显示
在自定义函数中写下以下代码:
代码讲解:定义空胞数组PlainText,使用Find_System函数获得的路径Path中的所有annotation,并通过判断annotation在simulink画布中的上边界来进行排序,使得得到的备注从simulink中从上往下排(Find_system函数查找到的handle无序,故要执行这个操作),并将备注的文字一一存储在PlainText胞元素中
这里引入Model Block在Simulink画布位置的官方解释
在完成这些准备工作之后,在上面的基础上完善成以下代码:
代码讲解:此处要注意的是换行操作,这里是对光标进行操作,即Selection.TypeParagraph[16],当然,还有就是换行操作还有另外两种方式,分别是在plaintext{1}后输入换行键(char(10))和InsertBreak(7)(后续会讲到)。还有一个是元胞数据的取用,都是用{}来操作,想像成C语言中的数组,但是元胞中的数据不用是同一种类型,它更为强大。
完成代码之后,得到Word的内容如下:
好了,本期内容到此就结束了。
本期的实例下载链接如下
实例Word_Generate3下载链接:
密码:z7ug
参考链接:
[1]-CN/office/vba/api/Word.documents
[2]-CN/office/vba/api/word.document.content
[3]-cn/office/vba/api/word.range
[4]-CN/office/vba/api/word.styles
[5]-CN/office/vba/api/word.font.name
[6]-CN/office/vba/api/word.font.size
[7]-CN/office/vba/api/word.font.bold
[8]-CN/office/vba/api/word.font.colorindex
[9]-CN/office/vba/api/word.font
[10]-CN/office/vba/api/word.paragraph.alignment
[11](1)-CN/office/vba/api/word.paragraph.outlinelevel
(2)-CN/office/vba/api/word.wdoutlinelevel
[12](1)-CN/office/vba/api/word.paragraph.linespacingrule
(2)-CN/office/vba/api/word.wdlinespacing
[13]-CN/office/vba/api/word.paragraph.linespacing
[14]-CN/office/vba/api/word.paragraph
[15]-CN/office/vba/api/word.style
[16]-CN/office/vba/api/word.selection.typeparagraph
往期回顾:
文章对你有所参考,请记得和小伙伴们分享,如果笔者有疏漏之处,也希望能不吝赐教。