账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
利用MATLAB报告产生器自动产生客制化报告
 

【作者: Thomas Deck】2018年03月15日 星期四

浏览人次:【25302】


制作报告几乎是每一种工程领域的必备工作,目的可以是为了要记录系统、确认设计符合需求与否、或者产生认证文件等等。若要以手动的方式产生庞大、复杂系统的报告则相当困难且耗时;而当报告必须依循特定的企业布局或者使用特殊的格式时,挑战程度就又更高了。


透过MATLAB报告产生器,则可以快速地产生出一个报告范本—再透过DOM API(注1),就能够以Microsoft Word、PowerPoint、PDF或HTML为各种类型的应用产生量身订作的报告。


本文将以Microsoft Word文件为例,说明如何利用DOM API来产生简单版的报告以及更复杂的客制化报告。


建立一个范本

使用DOM API产生报告的第一步,我们先建立一个文件范本。范本包含了固定内容,像是页首或页尾,与将以MATLAB函数动态地填入的预留区域(holes)。


在这个范例,我们从Word范本开始。为了建立范本,我们到上述连结提供的下载档案中的SimpleReport目录,并执行copyTemplate脚本。这个脚本从MATLAB安装资料夹复制了一个空的范本到我们所在的资料夹,并且将范本重新命名为myTemplate.dotx。接下来,我们从Word打开myTemplate.dotx档案。


提醒:有时Word把档案打开后标题列会显示”文件1”,而不是范本的名称,这种情况下无法储存你对范本进行的变更。如果从Windows命令行以/N参数开启Word应用程式或”openTemplate2013”脚本来呼叫Word打开范本就可以避免这样的问题。


打开文件之后,我们前往开发人员(Developer)页签并选择设计模式。开发人员页签是被预设为停用的。透过以下步骤可以启用该页签:


1.点选档案页签后,选择”选项”,并点选自订功能区。


2.从画面上自订功能区的下拉式选单选取”主要索引标签”,再将”开发人员”旁的方框打勾。


设计模式可把预留区域标示出来,帮助我们区别固定内容与预留区域。


我们在新增一个新的预留区域时,先用游标定出要建立预留区域的位置,并点选RTF内容控制按钮(“Aa”图示处)。按下属性按钮可以变更预留区域的属性(图1)。这里虽然还不需要在预留区域里面输入文字,不过如果加入文字来注记预留区域的目的,可以让范本更容易理解。这些文字内容不会显示于最终报告上。



图1 : 在Word 2013开启的报告范本。开发人员页签已启用,红色方框标示处为设计模式、RTF内容控制选项、与属性。
图1 : 在Word 2013开启的报告范本。开发人员页签已启用,红色方框标示处为设计模式、RTF内容控制选项、与属性。

我们开启内容控制属性视窗来指定标题与页签(这两者必须一致)。接下来,我们关闭对话框,储存并关闭范本。


把内容填入预留区块

开启MATLAB,执行fillFirstHole函式来产生一个新的文件。


新文件firstDocument是一种以myTemplate(.dotx)为依据的docx档案。我们指示DOM API移动到第一个预留区域,接着建立一个Text种类的物件,其中包含"Hello World”文字。我们把这项物件附加到文件里面,然后关闭文件,再打开firstDocument.docx来检视。


提醒:如果执行fillFirstHole函式的时候出现错误讯息,先确认一下myTemplate.dotx和firstDocument.docx两个档案是否都关闭了。


区块层级与进线预留区域

我们可以在Microsoft Word建立两种类型的预留区域:进线(inline)与区块层级(block-level)(图2)。进线型预留区域会出现在段落中,它只能接受能够存在于段落之中的内容,比如文字、图片、与超连结。区块层级的预留区域则可以容纳各种类型的内容,甚至是其他段落。



图2 : Word建立进线与区块层级的介面
图2 : Word建立进线与区块层级的介面

要建立一个进线预留区域时,先把游标移到范本的任何一个位置,接着点选RTF内容控制按钮。建立区块层级的预留区域时则是先标出空白段落之后再点选按钮。


提醒:如果要把进线预留区域直接放在一个段落之前,必须在段落之前加上一个空格,否则Word可能会建立成区块层级预留区域。你可以在预留区域建立好之后再清除空格。


加上不同样式

现在来改变一下报告上的文字字型。在前面的步骤,我们附加了一个文字物件到文件里。我们有几种改变文字物件外观的选择。


你可以改变个别的文字属性,像是粗体字、字体颜色,或利用StyleName 属性来定义外观。 StyleName 属性可以把Word样式套用到物件,也就是说物件的外观是由你在范本定义的样式来决定。


如果没有指定StyleName ,可以直接沿用范本内段落的样式。


如果你想要自订Word报告外观,则可以建立自己的样式定义或使用内建的样式。


DOM API只能使用范本内定义的样式。常用的样式已经建入提供的范本。如果要把不同的内建样式复制到范本,可以把新的样式先套用到一段暂时建立的文字,之后再把文字删除。


我们不建议改变或套用Word内建样式到你的范本。原因是,你的报告函式必须使用内建样式的内部名称,这些名称可能跟在Word里的名称不同。建议改为使用Word编辑器来依据内建样式建立出新的样式,再使用新样式在报告函式里面的名称。图3说明了如何设置Word来显示使用中的样式。



图3 : 只显示使用中样式的Word样式选项视窗格设定。
图3 : 只显示使用中样式的Word样式选项视窗格设定。

要定义或改变一个Word内样式,还是要透过DOM API来控制外观是依据任务来决定:如果你经常使用一个特定的格式或图案,可以考虑定义一个Word样式。 Word也有提供设定表格及清单的样式的选项。如果你只需要改变文件中特定的一小段,可能透过MATLAB函式来控制外观会更方便。


产生更进阶的报告

提醒:所有的样式都是依据Word正常样式。如果改变或使用这种样式,将会限制了你的自订选项。举例来说,改变字体会让你无法在表格样式使用不同的字体。



DOM API广泛的类别函式库藏让你可以在报告中加入许多不同种类的物件,像是文字、图片、连结、与表格。在开始建立包含多个物件的报告之前,要先定义一个建立报告的函式与收集显示在报告中之资料的函式之间的介面。


让每一个结构的栏位名称与预留区域都有一致的名称是最简单的方法。如此一来,要被填充进预留区域的物件在MATLAB函式里的程式码就会是一个简单的while-回圈。


加入图片与表格

我们从AdvancedReport资料夹内getAdvancedReportData函式搜集资料开始。这个函式定义了报告与资料之间的介面。有些元件是静态的文字,例如标题。其他则视系统的环境变数而定,像是作者资料等。两个表格都被填入以MATLAB why函式随机产生的句子。


接下来,我们依据我们的设计要求准备范本以及由介面定义的预留区域。这些项目都已经定义在AdvancedReportTemplate.dotx:


‧ 我们想要使用的Word样式:


- AR_Heading 1-3使用在自订章节标题(章节标题被用来建立目录)。


- AR_Title与AR_SubTitle用于封面的进线预留区域


- AR_Image与AR_Caption用在中心图片与经过编号的图片标题。


- AR_Normal用于字型与正常样式不同的文字。


- AR_Table使用在改变过外观的简易表格。


‧ 期望的段落与预留区域样式


‧ 上面有公司标志的静态页首和有标示页码的页尾


‧ 内容目录与图表目录


‧ 由静态章节与子章节标题定义的大纲架构


最后,我们以MATLAB函式createAdvancedReport来建立报告。我们在一个while回圈处理所有预留区域。切换回圈会从以下几种情况做出决定。


“标准”预留区域。在”其他”的切换情形,这些预留区域只会取得被分派到的文字。图形表示是由Word依据套用的样式来决定。


图片。在这种情况,我们的reportData架构包含了要加入至报告的图片路径。在processImage 函式,图片物件被加入至一个样式为AR_Image的段落。这个样式为置中对齐,因此图片也会被置中。图片的标题会以另一个样式为AR_Caption的段落表示。该样式可让数字自动编号,被用来建立图表目录。


简易表格。在processSimpleTable函式,我们在区块层级的预留区域建立一个完整的子章节。在加入表格之前,我们附加一个套用了AR_Heading2的新段落,来把新的第二层标题加进报告。我们也建立一个带有表格类别(Table-class)的简易表格。这里只需要表格资料与表格样式AR_Table。 Word里的表格样式会负责绘制与设定表格格式。


进阶表格。在processAdvancedTable,我们使用另一个区块层级预留区域来建立一个新的子章节及另一个表格—这次使用的是FormalTable类别。这个类别让我们可以建立一个完整的手绘表格。我们需要把每一个表格单元加进来,但我们可以完全掌控表格的外观。为了展示这一点,我们把每个单元格随机加上背景颜色。


现在我们已经做好执行createAdvancedReport并产生进阶报告的准备了。


在这个范例,我们建立了一个简易的架构,之后也可以很轻松地对这个架构作加强,使它可以涵盖几乎是所有的文件要求。所产生的文件可以用来进行要求管理或认证,也可以再做更进一步的处理—例如储存或封存为PDF档以方便携带、保留文字独立性,及避免内容被更改。


(本文作者Thomas Deck任职于MathWorks公司)


注1:DOM(文件物件模型, document object model)API可在你的系统记忆体建立一个代表性报告。


相关文章
以3D模拟协助自动驾驶开发
无线通讯的未来--为无所不在的连接做好准备
使用深度学习进行地下电缆系统预测性维护
实用型数位转型的最隹实践
利用类神经网路进行ADC错误的后校正
comments powered by Disqus
相关讨论
  相关新闻
» Ansys模拟分析解决方案 获现代汽车认证为首选供应商
» Pure Storage更新专为订阅经济打造的合作夥伴计画战略
» MIC:XR头戴装置以Apple与Google新品最受期待 Vision Pro购买观??者占四成
» SOLIDWORKS公开演示未来AI 率先导入工业设计软体应用
» BMW与达梭系统合作 打造3DEXPERIENCE未来工程平台


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK83J6XFI3ASTACUKW
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw