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

Posted

技术标签:

【中文标题】如何使用 MATLAB 创建包含文本和图形的报告【英文标题】:How to create reports containing text and figures with MATLAB 【发布时间】:2012-11-10 16:45:08 【问题描述】:

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

你有什么推荐的?

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

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

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

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

更新

我现在已经切换到使用 r2016b 版本的 MATLAB 报告生成器,它对我的​​编译代码用户来说工作得很好。不幸的是,这意味着拥有 MATLAB 许可证的同事也需要购买报告生成器,才能使用我编写的脚本工具。

【问题讨论】:

【参考方案1】:

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

一方面,报告生成器不需要您将脚本分解成小块并在模板中运行它们。如果你愿意,你可以这样做,在某些情况下,这是有道理的,但这不是必需的。事实上,许多报告生成器应用程序使用 MATLAB 脚本或程序与用户交互,在 MATLAB 工作区中生成数据,最后一步是从工作区数据生成报告。

此外,从 R2014b 版本开始,MATLAB 报告生成器附带一个称为 DOM API 的文档生成 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 报告生成器。您可能会惊讶于它变得如此强大。

【讨论】:

我现在已经切换到报告生成器,它运行良好。【参考方案2】:

我已经做了很多。没错,MATLAB 报告生成器通常不是一个很好的解决方案。 @Max 建议了正确的方法(通过其 COM 接口自动化 Word),但我会根据我的经验添加一些额外的 cmets 和提示。

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

希望有帮助!

【讨论】:

从 .emf 文件插入图形时的实际行为因使用的 Matlab 和/或 Word 版本而异。几年前我的成绩比现在好。但是,它仍然可以工作,所以如果它没有坏...【参考方案3】:

我认为您对报告生成器的看法是正确的。

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

非常相似的方法是创建一个 Latex 文件。然后从中创建一个 pdf - 尽管为此您需要在部署的机器上安装乳胶。

最后,您可以在 Matlab 中使用 Java 的良好集成。您可以使用几个库 - 例如this。但我想知道所有的复杂情况是否值得。

【讨论】:

【参考方案4】:

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

编辑添加:要将数字添加到文档中,请使用 -dmeta 参数将它们保存为 .emf 文件到 print(),然后将它们添加到文档中,如下所示:

 WordServer.Selection.InlineShapes.AddPicture(fileName);

【讨论】:

感谢您的示例。您如何发现 word 提供的所有服务?谷歌没有帮助。 Microsoft 网站上有大量信息,但很难找到。尝试寻找“Word Automation”或“VBA Word”。一旦你得到一个 Word 对象,你可以在 Matlab 中调用 methods() 来查看它所公开的内容,但这还不是全部。 不幸的是,最新版本的 Word 中提供的帮助不再记录这些内容。我相信 O'Reilly 书中描述的接口几乎没有变化(shop.oreilly.com/product/9781565927254.do),除了 Word 2010 的 ActiveDocumentSaveAs() 方法已被 ActiveDocumentSaveAs2() 取代。您还可以尝试录制宏(不知何故,从“查看”功能区选项卡中可以使用该工具!)并查看生成的 VBA。

以上是关于如何使用 MATLAB 创建包含文本和图形的报告的主要内容,如果未能解决你的问题,请参考以下文章

如何用matlab 画散点图 如何标记数据点的颜色

如何在matlab图形上将日期显示为字符串

如何用MATLAB GUI创建图形用户界面

Matlab中的小eps图形大小

如何用matlab画平滑曲线?

如何在matlab图形中插入希腊字母