如何使用MATLAB创建包含文本和图形的报表

时间:2012-11-22 10:01:14

标签: matlab pdf-generation report matlab-deployment matlab-figure

我正在使用MATLAB脚本调整机器上的控制系统。调整完成后,我想要一个包含文本的报告(特别是序列号,日期/时间和调整期间确定的值)和图,特别是传递函数。

你推荐什么?

我使用的任何解决方案都应与MATLAB编译器兼容,以便我可以将我的解决方案分发给现场工程师团队。

理想情况下,报告将是PDF文档。

MATLAB报告生成器似乎不是正确的产品,因为看起来我必须将我的脚本分解成小块并将它们嵌入到报告模板中。我的脚本包含用户干预和更改值的机会,或者如果情节看起来不正确则拒绝调整,而我的预感是,如果代码从报告生成器运行,这将很难。此外,如果代码结构由报告模板的要求决定,我担心代码结构和可维护性将会丢失。

如果我的假设是错误的,请发表评论。

更新

我现在已经切换到使用版本为r2016b的MATLAB报告生成器,它对我的​​编译代码用户非常有效。不幸的是,这意味着拥有MATLAB许可证的同事也需要购买报告生成器,以便使用我的工具编写脚本。

4 个答案:

答案 0 :(得分:4)

作为MATLAB报告生成器的开发经理,我担心这个问题可能会给报告生成器的功能留下错误的印象。

首先,报告生成器不要求您将脚本分成小块并在模板中运行它们。你可以选择,在某些情况下,它是有道理的,但这不是一个要求。事实上,许多Report Generator应用程序使用MATLAB脚本或程序与用户交互,在MATLAB工作区中生成数据,最后一步,从工作区数据生成报告。

此外,从R2014b版本开始,MATLAB Report Generator附带了一个文档生成API,称为DOM API,它允许您在MATLAB程序中嵌入文档生成语句。例如,您可以以编程方式创建文档对象,添加和格式化文本,段落,表格,图像,列表和子文档,并输出Microsoft Word,HTML或PDF输出,具体取决于您选择的输出类型。您甚至可以使用Word或HTML编辑器以编程方式填写您创建的表单中的空白。

API在Windows,Linux和Mac平台上运行,并在所有三个上生成Word和HTML输出,而不使用Word。在Windows上,它使用Word引擎从它生成的Word文档生成PDF输出。

最新版本的MATLAB报告生成器引入了一个PowerPoint API,其功能类似于DOM API。如果您需要在MATLAB应用程序中包含报告生成,请不要根据过去的印象排除MATLAB报告生成器。你可能会对它变得多么强大感到惊讶。

答案 1 :(得分:3)

我做了很多。你是对的,MATLAB Report Generator通常不是一个很好的解决方案。 @Max建议正确的方法(通过其COM接口自动化Word),但我会根据我的经验添加一些额外的评论和提示。

  1. 请记住,如果您使用此解决方案,则视您的最终用户将运行Windows而在其计算机上拥有Office副本。如果您希望最终生成PDF报告,则需要使用Office 2010或更高版本。
  2. 我敢打赌,你会发现在Excel而不是Word中自动生成报告更容易。鉴于您正在使用MATLAB生成报告,您可能在数字表中需要很多东西,这些东西在Excel中更容易布局。
  3. 如果要在Word中执行此操作,最简单的方法是首先(不使用MATLAB)创建模板.doc / .docx文件,其中包含对所有报表和空白表都相同的任何通用文本任何信息。打开曲目更改,并在您将填写信息的每个点插入空注释。然后在MATLAB的报表创建例程中,连接到Word并遍历每个注释,将其替换为您希望的任何数据。
  4. 如果您正在学习使用MATLAB自动化Excel,Excel Interop文档中的this page 真的非常有帮助。 Word中有一个等价的。
  5. 与@Max不同,我通过将数字保存到.emf文件然后插入它们来获得好结果。理论上确实保留了可编辑性,但我从来没有发现那么有价值。相反,在MATLAB中使图形看起来正确(和正确的大小),然后使用print(figHandle, 'dbitmap')将其复制到剪贴板并使用Worksheet.Range('A1').PasteSpecial粘贴到Excel。
  6. 要另存为PDF,请使用Workbook.ExportAsFixedFormat('xlTypePDF', pathToOutputFile)
  7. 希望有所帮助!

答案 2 :(得分:2)

我认为你对报告生成器是正确的。

在我看来,最快/最简单的方法是在html文档中生成报告。为此你只需要数字并写一个文本文件,转换应该是微不足道的。

相似的方法是创建一个Latex文件。然后从中创建一个pdf - 尽管如此,您需要在已部署的计算机上安装latex。

最后,您可以在Matlab中使用Java的良好集成。您可以使用多个库 - 例如this。但我想知道所有的并发症是否值得。

答案 3 :(得分:1)

您是否考虑通过其ActiveX接口驱动Microsoft Word?我在编译的Matlab程序中完成了这项工作,效果很好。查看actxserver()的Matlab帮助:您要创建的对象的类型为Word.Application

编辑添加:要将数字输入文档,请使用-dmeta参数将其保存为。print(),然后将其添加到文档中,如下所示:

 WordServer.Selection.InlineShapes.AddPicture(fileName);