Как создавать отчеты, содержащие текст и рисунки, с помощью MATLAB

Я использую скрипт MATLAB для настройки системы управления на машине. Когда настройка будет завершена, я хотел бы получить отчет, содержащий текст (особенно серийный номер, дату/время и значения, определенные во время настройки) и графики, особенно передаточные функции.

Что вам порекомендовать?

Какое бы решение я ни использовал, оно должно быть совместимо с компилятором MATLAB, чтобы я мог распространять свое решение среди группы полевых инженеров.

В идеале отчет должен быть в формате PDF.

Генератор отчетов MATLAB не кажется подходящим продуктом, так как кажется, что мне нужно разбить свой сценарий на маленькие части и встроить их в шаблон отчета. Мой сценарий содержит возможности для вмешательства пользователя и изменения значений или отклонения мелодии, если графики выглядят неправильно, и я подозреваю, что это будет сложно, если код запускается из генератора отчетов. Кроме того, я боюсь, что структура кода и удобство сопровождения будут потеряны, если структура кода будет определяться требованиями шаблона отчета.

Пожалуйста, прокомментируйте, если мои предположения неверны.

ОБНОВЛЕНИЕ

Теперь я переключился на использование генератора отчетов MATLAB с выпуском r2016b, и он очень хорошо работает для моих пользователей скомпилированного кода. К сожалению, это означает, что коллегам, у которых есть лицензия MATLAB, также необходимо купить генератор отчетов, чтобы использовать мои скриптовые инструменты.


person Nigel Davies    schedule 22.11.2012    source источник


Ответы (4)


Как менеджер по разработке генератора отчетов MATLAB, я обеспокоен тем, что этот вопрос может оставить неправильное впечатление о возможностях генератора отчетов.

Во-первых, генератор отчетов не требует, чтобы вы разбивали сценарий на маленькие части и запускали их внутри шаблона. Вы можете сделать это, если хотите, и в некоторых обстоятельствах это имеет смысл, но не является обязательным требованием. На самом деле, многие приложения Report Generator используют сценарий или программу MATLAB для взаимодействия с пользователем, генерации данных в рабочей области MATLAB и, в качестве последнего шага, генерации отчета на основе данных рабочей области.

Более того, начиная с версии R2014b, генератор отчетов MATLAB поставляется с API генерации документов, называемым DOM API, который позволяет встраивать операторы генерации документов в программу MATLAB. Например, вы можете программно создать объект документа, добавить и отформатировать текст, абзацы, таблицы, изображения, списки и вложенные документы, а также вывести выходные данные Microsoft Word, HTML или PDF в зависимости от выбранного типа вывода. Вы даже можете программно заполнить пробелы в формах, которые вы создаете, используя Word или HTML-редактор.

API работает на платформах Windows, Linux и Mac и генерирует выходные данные Word и HTML на всех трех платформах без использования Word. В Windows он использует Word под капотом для создания выходных PDF-файлов из документов Word, которые он генерирует.

В последнем выпуске генератора отчетов MATLAB представлен API PowerPoint с возможностями, аналогичными API DOM. Если вам необходимо включить генерацию отчетов в приложение MATLAB, не исключайте генератор отчетов MATLAB на основе прошлых впечатлений. Вы можете быть удивлены тем, насколько сильным он стал.

person Paul Kinnucan    schedule 15.06.2015
comment
Теперь я переключился на генератор отчетов, и он работает хорошо. - person Nigel Davies; 06.12.2016

Я сделал это совсем немного. Вы правы в том, что генератор отчетов MATLAB обычно не является отличным решением. @Max предлагает правильный подход (автоматизация Word через его COM-интерфейс), но я бы добавил несколько дополнительных комментариев и советов, основанных на моем опыте.

  1. Помните, что если вы выберете это решение, вы зависите от того, что ваши конечные пользователи будут работать под управлением Windows и иметь копию Office на своем компьютере. Если вы хотите в конечном итоге создать отчет в формате PDF, это должен быть Office 2010 или выше.
  2. Могу поспорить, что вам будет проще автоматизировать создание отчетов в Excel, чем в Word. Учитывая, что вы создаете отчет с помощью MATLAB, вам, вероятно, понадобится довольно много вещей в таблицах чисел, которые легче разместить в Excel.
  3. Если вы собираетесь делать это в Word, проще всего сначала (без MATLAB) создать файл шаблона .doc/.docx, содержащий любой общий текст, который будет одинаковым для всех отчетов, и пустые таблицы для любой информации. Включите отслеживание изменений и вставляйте пустые комментарии в каждую точку, которую вы будете заполнять информацией. Затем в процедуре создания отчета в MATLAB подключитесь к Word и повторите каждый комментарий, заменив его любыми данными, которые вы хотите.
  4. Если вы учитесь автоматизировать Excel с помощью MATLAB, эта страница из документации Excel Interop действительно полезна. Есть аналог для Word.
  5. В отличие от @Max, я никогда не получал хороших результатов, сохраняя цифры в файле .emf и затем вставляя их. Теоретически это сохраняет возможность редактирования, но я никогда не находил это ценным. Вместо этого сделайте фигуру правильной (и нужного размера) в MATLAB, затем скопируйте ее в буфер обмена с помощью print(figHandle, 'dbitmap') и вставьте в Excel с помощью Worksheet.Range('A1').PasteSpecial.
  6. Чтобы сохранить в формате PDF, используйте Workbook.ExportAsFixedFormat('xlTypePDF', pathToOutputFile).

Надеюсь, это поможет!

person Sam Roberts    schedule 22.11.2012
comment
фактическое поведение при вставке рисунка из файла .emf зависит от используемой версии Matlab и/или Word. Пару лет назад у меня были лучшие результаты, чем сейчас. Тем не менее, он все еще работает, так что, если он не сломался... - person Max; 22.11.2012

Я думаю, вы правы насчет генератора отчетов.

На мой взгляд, самым быстрым/простым подходом было бы создание отчета в html-документе. Для этого вам просто нужны цифры и написать текстовый файл, преобразование должно быть тривиальным.

Аналогичным подходом было бы создание файла Latex. А затем создайте из него PDF-файл, хотя для этого вам нужно установить латекс на развернутые машины.

Наконец, вы можете использовать хорошую интеграцию Java в Matlab. Вы можете использовать несколько библиотек, например эту. Но мне интересно, будут ли все осложнения того стоить.

person bdecaf    schedule 22.11.2012

Рассматривали ли вы возможность управлять Microsoft Word через его интерфейс ActiveX? Я сделал это в скомпилированных программах Matlab, и это работает хорошо. Посмотрите справку Matlab для actxserver(): объект, который вы хотите создать, имеет тип Word.Application.

Изменить, чтобы добавить: Чтобы получить рисунки в документе, сохраните их как файлы .emf, используя аргумент -dmeta для print(), а затем добавьте их в документ следующим образом:

 WordServer.Selection.InlineShapes.AddPicture(fileName);
person Max    schedule 22.11.2012
comment
Спасибо за пример. Как узнать обо всех услугах, которые предоставляет слово? Гугл не помогает. - person Nigel Davies; 22.11.2012
comment
На веб-сайте Microsoft имеется достаточно информации, но ее трудно найти. Попробуйте найти «Автоматизация Word» или «VBA Word». Как только вы получите объект Word, вы можете вызвать для него methods() в Matlab, чтобы увидеть, что он предоставляет, но это еще не все. - person Max; 22.11.2012
comment
Справка, доступная в последних версиях Word, к сожалению, больше не документирует этот материал. Я считаю, что интерфейс, описанный в книге О'Рейли, практически не изменился (на shop.oreilly.com). /product/9781565927254.do), ЗА ИСКЛЮЧЕНИЕМ того, что для Word 2010 метод ActiveDocumentSaveAs() был заменен на ActiveDocumentSaveAs2(). Вы также можете попробовать записать макрос (эта возможность доступна, необъяснимо, на вкладке ленты «Вид») и посмотреть на сгенерированный VBA. - person Max; 22.11.2012