# reportgen
> 本文将介绍Matlab的一个实用技巧。一键生成Word版本的报告。Matlab之前都是通过调用COM接口来实现的,类似于VBA,虽然可做的事情很多,但并不适合一般的童鞋。
## 1. 自动化报告
测试平台: MATLAB 2015b
先来看一个最简单的例子(demo1.m)
```Matlab
% demo1.m
import mlreportgen.dom.*;
d = Document('demo1','docx');
open(d);
append(d,'hello world!');
close(d);
rptview(d.OutputPath);
```
```Matlab
import mlreportgen.dom.*;
```
第一行是将所需要的类和函数导入工作空间。这里我们最常用的类就是Document.
```Matlab
d = Document('test','docx');
open(d);
```
在第二、三行中我们新建一个文档,其中文件类型`docx`可以替换成`html`或者`pdf`. Document类的相关属性可以通过命令查看 (doc mlreportgen.dom.Document)
```Matlab
append(d,'hello world!');
```
在第四行我们给文档添加了一句经典的话,我们还可以自定义它们的样式。比如加粗、斜体、改成蓝色、字体大小等等。
```Matlab
% 替换上面的一行代码
p=Text('hello world');
p.Style={Bold(true),FontSize('16pt'),Color('blue')};
p.Strike='double';
append(d,p)
```
这里出现了第一个文档类:`Text`,即文本。Matlab提供了很多可调节的属性,如下表。修改起来也很方便,如要把文本改为斜体,则添加:`p.Italic=1;`即可。
| `Text`的属性 | 取值 | 备注 |
| :---- |:----| :---|
|Bold | true/false | 加粗|
|Color | str('red'、'blue'等) |颜色|
|Italic | true/false | 斜体|
|BackgroundColor | str| 背景色|
|Underline| str('single'、'dotdash'等)| 下划线|
|FontFamilyName| str | 字体|
|FontSize| str('12pt')| 字体大小|
|Strike| str| 删除线|
|StyleName| str| 模板中的样式名|
接下来我们将生成一个更复杂的文档。首先想想一个word文档一班都有哪些元素。MATLAB提供了很多(下面的表格仅列出了部分)。本文主要介绍其中的五个:页面设置、标题、段落、表格、图片。
| 属性 | 含义 |
| :-------------: | :--------|
|CustomAttribute | Custom element attribute|
|CustomElement | Custom element of a document|
|CustomText | Plain text to be appended to a custom element|
|DOCXPageFooter | Page footer for a Word document.|
|DOCXPageHdrFtr | Page Base class for page header and footer|
|DOCXPageHeader | Page header for a Word document.|
|DOCXPageMargins | Margins of pages in a Word page layout|
|DOCXPageSize | Size, orientation of pages in a Word layout|
|DOCXSection | Page layout section of a Word document|
|**Document** | Create a dom document|
|ExternalLink | Create a hyperlink to an external target|
|Form | Defines a form|
|FormalTable | Create a formal table|
|Group | Group of document objects|
|Heading | Create a heading paragraph.|
|HorizontalRule | Create a horizontal rule.|
|**Image** | Create an image to be included in a report.|
|ImageArea | Defines an image area as a hyperlink|
|InternalLink | Create a hyperlink to a target in this|
|LinkTarget | Create a target for a hyperlink.|
|ListItem | Item in a list|
|Node | Defines a document node|
|Object | Defines a document object|
|OrderedList | Ordered (numbered) list|
|Paragraph | Create a formatted block of text, i.e., a paragraph.|
|**Table** | Create a table.|
|TableColSpecGroup| Defines style of a group of table columns|
|TableEntry| Create a table Entry|
|TableRow | Creates a table row|
|Template| Create a template for a document|
|**Text**| Create a text object |
接下来我们做一个完整的模板。首先新建空白文档。
```Matlab
% demo2.m
import mlreportgen.dom.*;
d=Document('demo2','docx');
open(d);
```
### 1.1 页面
页面设置包括页面大小('A4'等)、页面方向、页边距.
```Matlab
% 页面设置
s = d.CurrentDOCXSection;
s.PageSize.Orientation ='landscape'; % portrait(default)
s.PageSize.Height = '8.5in';
s.PageSize.Width = '11in';
s.PageMargins.Left = '3.0cm';
s.PageMargins.Right = '3.0cm';
s.PageMargins.Top = '2.5cm';
s.PageMargins.Bottom = '2.5cm';
% 中文字体样式设置
heiti=FontFamily;
heiti.FamilyName='Arial';
heiti.EastAsiaFamilyName='黑体';
songti=FontFamily;
songti.FamilyName='Arial';
songti.EastAsiaFamilyName='宋体';
```
### 1.2 标题
标题的初始格式由模板中自带的标题样式决定,当然也可以自己修改。
```Matlab
%% 标题
p=Heading(1,'Matlab 自动化报告模板');% 一级标题
%p.Color='red';
%p.HAlign='center';
p.Style={heiti,Color('red'),HAlign('center')};
append(d,p);
```
### 1.3 段落
与文本不同,段落除下文本的属性外,还有边距、对齐、首行缩进、行间距、段前、段后等属性需要调节。在下面的代码框中,FirstLineIndent代表首行缩进的宽度,LineSpacing代表行间距,OuterMargin代表边距。在这里我们还引入了一个新的类:ExternalLink(外部链接),当然Matlab也提供文档内部链接:InternalLink.
```Matlab
%% 段落
append(d,Heading(2,'一、段落模板'));
s='这里是段落。';
s=repmat(s,[1,12]);
p = Paragraph(s);
% 中文字体样式自定义
p.Style={songti,Color('blue'),...
LineSpacing(1.5),...
OuterMargin('10pt','0pt','0pt','10pt')};
p1=Text('下划线。');%同段落差不多.
p1.Underline='single';
p1.Color='red';
append(p,p1);
append(p,s);
p2=ExternalLink('http://github.com/gasongjian/', '超链接');
append(p,p2);
p.FontSize='14pt';
p.FirstLineIndent='28pt';%这里差不多就是2个字符大小
append(d,p);
```
### 1.4 简易表格
Matlab 支持直接从数组矩阵和元胞矩阵建立表格。如`t=Table(magic(5))`或者
`t=Table(cell(5))`. 也可以利用TableRow一行一行添加。一个单元格可以填充的元素很多(文本、图像等),所以可调节的就是表格的边框、单元格的大小、对齐等。本文给出一个简易的例子和一个复杂的例子。一件很遗憾的事就是不能合并单元格。当写完demo2后,本文还将提供一种更为简便的方式。
```Matlab
%% 简易表格
append(d,Heading(2,'二、简单表格'));
t={'志明','语文','数学','英语'; ...
'成绩','70','98','89'; ...
'等级','B','A','A'};
p=Table(t);
% 格式化单元格中的段落
for ii=1:p.NRows
for jj=1:p.NCols
t=entry(p,ii,jj);
t.Children(1).Style={songti,...
Color('green'),...
FontSize('12pt'),...
LineSpacing(1.0),...
OuterMargin('0pt','0pt','0pt','0pt')};
end
end
p.Style = {Border('single','blue','3px'), ...
ColSep('single','blue','1px'), ...
RowSep('single','blue','1px')};
p.Width = '50%';
p.HAlign='center';% 居中对齐
p.TableEntriesHAlign='center';
p.TableEntriesVAlign='middle';
append(d,p);
```
### 1.5 复杂表格
```Matlab
%% 复杂表格
append(d,Heading(2,'三、复杂表格'));
q = Table(5);
q.Border = 'single';
q.ColSep = 'single';
q.RowSep = 'single';
row = TableRow;
te = TableEntry('算法名称');
te.RowSpan = 2;
append(row, te);
te = TableEntry('第一类');
te.ColSpan = 2;
%te.Border = 'single';
append(row, te);
te = TableEntry('第二类');
te.ColSpan = 2;
%te.Border = 'single';
append(row, te);
append(q,row);
% 第二行
row=TableRow;
append(row,TableEntry('T1'));
append(row,TableEntry('T2'));
append(row,TableEntry('T3'));
append(row,TableEntry('T4'));
append(q,row);
% 其他行
t=TableRow;
append(t,TableEntry('条目'));
for i=1:4
append(t,TableEntry(' '));
end
append(q,t);
append(q,clone(t));
append(q,clone(t));
append(q,clone(t));
q.TableEntriesStyle={Width('80'),Height('40')};
q.Style = {Border('single','green','3px'), ...
ColSep('single','green','1px'), ...
RowSep('single','green','1px')};
q.HAlign='center';% 居中对齐
q.T
利用Matlab生成报告(Word、PPT).zip
版权申诉
44 浏览量
2023-07-22
17:29:55
上传
评论
收藏 5.37MB ZIP 举报
AbelZ_01
- 粉丝: 895
- 资源: 5441
最新资源
- 适用于tensorflow-2.11.0 CUDA版本11.2的cuDNN8.1版本
- 5Y study学习平台2016计算机基础-综合测试(8)_哔哩哔哩_bilibili_2580252704.mp4
- (大赛作品)STM32实现的F072RB NUCLEO智能家居控制.zip
- STM32实现的数字示波器源码+数字信号处理教程、配套实例.zip
- 【cookie续续】【cookie续续】【cookie续续】
- 低功耗STM32实现的F411开发板(原理图+PCB源文件+官方例程+驱动等).zip
- 基于stm32实现的 nucleo-L476的智能灯(操作说明+源码).zip
- 基于STM32实现的 NUCLEO板设计彩色LED照明灯(纯cubeMX开发).zip
- 基于STM32实现的 的联合调试侦听设备解决方案(原理图、PCB源文件、调试工具、视频).zip
- 基于STM32实现的 人群定位、调速智能风扇设计(程序、设计报告、视频演示).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈