15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 如何用matlab出word版本的报告?

如何用matlab出word版本的报告?

时间:2023-10-29 03:42:01 | 来源:网站运营

时间:2023-10-29 03:42:01 来源:网站运营

如何用matlab出word版本的报告?:因为回答和文章不能同步,最新的版本请参见:

MATALB 的报告自动生成 - 01 - 本站 (zhihu.com)

MATALB 的报告自动生成 - 02 基于word模板 - 本站 (zhihu.com)

(PPT的参见:自动报告生成 - PPT - 本站 (zhihu.com))

-----------------------以下为原回答------




之前在 关于 Simulink 虚拟车辆建模的合集 - 本站 (zhihu.com) 提到仿真结果后处理的时候,提到“报告生成”,再加上之前也有和 TC 聊到关于报告自动生成的问题。

因此就来聊一下自动报告生成这个话题。

目前 MATLAB Report Generator 直接提供的 API 接口操作包括 PDF, Word,PPT 以及 HTML。实际上因为 MATLAB 自己有 Excel 读写功能,所以理论上也是可以通过基本的读写操作来更新 Excel 的数据

这里主要聊一下 word 格式,关于PPT以后有机会再说。

Simulink Report Generator,简单的说就是针对 Simulink 提供了很多信息获取的 API 以及一些针对 Simulink 的模板,更多的适合于导出 Simulink 模型的说明报告。

自动报告生成简单来说,有三大路径:

Report 01 纯脚本

构造一个报告的步骤,起来很简单:

新建报告文档 -> 使用给定的 API 定义各个报告环节,比如标题 -> 给各个环节的属性赋值,比如标题为“我的报告” -> 将这个环节添加到报告文档 -> 结束。

% 新建一个报告文档import mlreportgen.report.*import mlreportgen.dom.*;rpt = Report('myReport','pdf');% 添加报告元素 - 首页tp = TitlePage;% 给改报告元素赋值tp.Title = Text("本站用户统计报告"); tp.Subtitle = Text("之个人账号阅读访问"); tp.Subtitle.Color = "red"; tp.Image = which("Capture.JPG"); tp.Author = "作者:基于模型设计柚子"; tp.Publisher = "发行商:本站.com"; tp.PubDate = date();append(rpt,tp)%% Chapter1 章节chapter = Chapter("简介"); % 1.1 Section 段落 sec1 = Section("这里是第一章第一节?"); para = Paragraph('这里是第一章第一节的内容.'); append(sec1,para) append(chapter,sec1) % 1.2 Section 段落 sec2 = Section("这里是第一章第二节"); para = Paragraph('这里是第一章第二节的内容'); append(sec2,para); append(chapter,sec2)append(rpt,chapter)% 添加到报告文档里去close(rpt)% 查看报告rptview(rpt)就得到了:

a. 报告类型

首先,报告可以选择不同的文件类型,"pdf','html','html-file',''docx'

b. 报告元素

其次,除了 TitlePage 之外,还有其它报告元素可以选择添加。

web(fullfile(docroot, 'rptgen/referencelist.html?type=function&category=title-pages-and-tables-of-contents-1&s_tid=CRUX_topnav'))TableOfContents:

ListOfFigures

ListOfCaptions

c. 内容元素

web(fullfile(docroot, 'rptgen/paragraphs-and-text-strings.html?s_tid=CRUX_lftnav'))


但我本人不是很喜欢完全这种报告生成的方式,纯粹是在用代码来构造 Word。

很多时候,我们需要的是根据我们的仿真结果或者其它,来更新一个报告。

也就是说,报告里有动态和静态的部分。

动态更新报告模板

举个例子,在下面这个模板文件(后面再说如何定义模板文件)里,黄色的部分是需要动态修改的部分。

这里为了举例,按照黄色块的顺序,分为不同类型:

  1. 文字
  2. 日期
  3. 数字
  4. 图片
  5. 表格
数据更新后,通过代码将特定的结果填入这些占位符,得到如下报告:




1. 模板定义

首先新建一个模板文件:

import mlreportgen.dom.*mlreportgen.dom.Document.createTemplate('TemplateBasedOnHole','docx');打开这个模板文件TemplateBasedOnHole.docx,然后正常编辑 Word 报告静态内容,利用 Word 自身功能设置章节文本格式。




2. 定义动态占位符

启用 Word 的开发者菜单,准备设置动态部分:

Word打开显示开发工具https://www.zhihu.com/video/1547759357584244736把需要动态变化的部分,设置为占位符,比如把更新人员名字和更新日期设置为动态部分。

具体操作过程:

https://www.zhihu.com/video/1547771326248800256

3. 动态更新占位符

可以用以下模式的代码,生成报告。

遍历每一个占位符(标记设置为 Hole),根据刚刚定义占位符时取的标题名字,用append命令来填入对应内容。

import mlreportgen.dom.*rptname = 'FileeholeReport'rpt = Document(rptname,'docx','TemplateBasedOnHole');author = '基于模型设计柚子';PubData = date();% 更新模式while ~strcmp(rpt.CurrentHoleId,'#end#') switch rpt.CurrentHoleId case 'Author' append(rpt,author); case 'PubDate' append(rpt,PubData); end moveToNextHole(rpt);end close(rpt);rptview(rpt)所以这个报告生成的逻辑,就这么简单,其它的不外乎添加不同的元素。

4. 表格和图片

用类似的方式再建立更多的占位符。

对应的说明参见代码段。

import mlreportgen.dom.*rptname = 'FileeholeReport'rpt = Document(rptname,'docx','TemplateBasedOnHole');author = '基于模型设计柚子';PubData = date();% 表格 % headerLabels = ["日期","阅读","播放","点赞"];tableData = readtable('日报表.xls','ReadVariableNames',true);% 从 excel文件读入表格% 下面这一行纯粹是因为读入的时候中文显示不对,手动改的。% 如果读入的表格标题栏显示正常,则不需要下面这一行% 理论上说,表格最好不要用中文名tableData.Properties.VariableNames = ["日期","阅读","播放","点赞","喜欢","评论","收藏","分享"];% 文字 - 总阅读数,数字number 转文字stringcount1 = num2str(sum(tableData{:,2}));% 图片 plot1fig = figure% 如果用了中文名的话,表格按列名取数据的时候,加上小括号plot(tableData.('日期'),tableData.('阅读'));exportgraphics(fig,'barchart.jpg');% 把 plot 转存为图片,jpg是随便选的,可以选择其它合适的图片格式。plot1 = Image('barchart.jpg');plot1.Style = [plot1.Style {ScaleToFit}]; % 其实代码也可以定义这些元素的格式。% 表格 table1tableData2Publish = tableData;tableData2Publish.('日期') = char(tableData2Publish.('日期'));% 这里转为tableData2Publish纯粹是为了把读入的datatime数据类型转换为文本table1 = FormalTable(tableData2Publish);table1.StyleName = 'myTableStyle'; % 这里的表格形式不用代码来定义,而是直接选择 Word 模板里定义好的格式。myTableStyle的定义见后面的视频。table1.Style = [table1.Style,{ResizeToFitContents(true),Width('6in')}, ... {HAlign('center')}]; % 表格居中显示% 图片 plot2fig = figureplot(tableData.('日期'),tableData.('播放'));exportgraphics(fig,'barchart.jpg')plot2 = Image('barchart.jpg');plot2.Style = [plot2.Style {ScaleToFit}];while ~strcmp(rpt.CurrentHoleId,'#end#') switch rpt.CurrentHoleId case 'Author' append(rpt,author); case 'PubDate' append(rpt,PubData); case 'TotalReading' append(rpt,count1); case 'Plot1' append(rpt,plot1); case 'Table1' append(rpt,table1); case 'Plot2' append(rpt,plot2); end moveToNextHole(rpt);endclose(rpt);rptview(rpt)

5. Word 里的表格格式设计

随便在word里插入一个表格,调出 表设计 菜单,将一个表格设计方案命名为 myTableStyle。

操作过程:

https://www.zhihu.com/video/1547771473884028928


一般来说,报告就包括以上内容了,大部分的 word 类型的报告都可以处理。

区别可能就在于特殊的排版格式之类,使用这种占位符的方式来生成报告,用 Word 自带功能来处理更多格式的问题,会使得报告生成的代码简单得多。

不过以上内容其实没有用脚本循环的方式来遍历各个章节,不过这个是和编程手段相关,和报告生成本身的功能关系不大了。




6. 其它元素

其它元素可以在帮助文档搜索 Content Generation 。

Report 02 App

除了纯脚本之外,还提供了一个App。我个人最喜欢上面的方式,所以这个 App,感兴趣的可以自己去研究下,这里仅当提供个信息。

简答说来,就是用树状图来表示要生成的报告模板(可以嵌套循环),元素直接从右侧库里拖入。然后选择不同的报告文件格式,生成报告。

Live Editor

从某种意义上说,Live Editor 能导出word和PDF,HTML,方便把脚本、说明文字,图片、公式、超链接、各种控件、数据处理 App都放在一起,也算是能生成报告了。

在特定的场景下,也挺方便的,所见即所得。


最后,PPT 其实也有类似的方式来自动生成,也很简单

以后有机会再说。



关键词:版本,报告

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭