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

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

你有什么推荐的?

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

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

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

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

更新

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

【问题讨论】:

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


    【解决方案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 和提示。

    1. 请记住,如果您要使用此解决方案,则取决于您的最终用户将运行 Windows,并在他们的计算机上拥有 Office 副本。如果您想最终生成 PDF 报告,则需要 Office 2010 或更高版本。
    2. 我敢打赌,您会发现在 Excel 中自动生成报告比在 Word 中更容易。鉴于您正在从 MATLAB 生成报告,您可能需要在数字表格中包含很多内容,这些内容更容易在 Excel 中进行布局。
    3. 如果您打算在 Word 中执行此操作,最简单的方法是首先(不使用 MATLAB)创建一个模板 .doc/.docx 文件,其中包含所有报告和空白表格都相同的通用文本任何信息。打开跟踪更改,并在您将要填写信息的每个点插入空 cmets。然后在 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)

    希望有帮助!

    【讨论】:

    • 从 .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。
      猜你喜欢
      • 2021-11-19
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多