如何使用 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 创建包含文本和图形的报告的主要内容,如果未能解决你的问题,请参考以下文章