Этот пример показывает, как включать содержимое блоков Simulink DocBlock в отчете Microsoft Word, сгенерированном API Отчета.
Импортируйте пакеты API, которые будут использоваться в этом отчете. Это позволяет вам обращаться к классам API их неполными именами, то есть, без потребности задать пакеты класса, в которых они находятся.
import mlreportgen.report.* import slreportgen.report.* import slreportgen.finder.* import mlreportgen.dom.*
Загрузите модель, включенную в этот пример. Модель содержит блоки DocBlock, которые содержат простой текст, HTML и содержимое RTF, соответственно.
model = 'slreportgen_demo_docblock';
load_system(model);
Создайте контейнер, чтобы содержать содержимое отчета.
rpt = slreportgen.report.Report('ModelDoc', 'docx');
Добавьте титульный лист и оглавление.
add(rpt, TitlePage('Title', sprintf('%s Model Documentation', model))); add(rpt, TableOfContents);
Создайте массив ячеек, чтобы содержать пути временных файлов, используемых, чтобы сохранить содержимое блоков DocBlock. Добавьте пути к этому массиву, когда файлы создаются. В конце отчета используйте этот массив, чтобы удалить файлы после того, как отчет будет завершен. Файлы не могут быть удалены, пока отчет Word не сгенерирован.
dbFiles = {};
Найдите и цикл через все системы в модели.
finder = SystemDiagramFinder(model);
for system = find(finder)
Создайте главу для каждой системы. Включайте имя системы в заголовок главы. Используйте эту главу для сообщить относительно содержимого DocBlock, если таковые имеются, системы.
ch = Chapter('Title', sprintf('System %s', system.Name));
Найдите и цикл через все блоки DocBlock в существующей системе.
docBlockFinder = BlockFinder(system); docBlockFinder.Properties = {'MaskType', 'DocBlock'}'; docBlocks = find(docBlockFinder); for docBlock = docBlocks
Используйте docblock команду, чтобы извлечь содержимое блока и добавить его в главу.
contentType = get_param(docBlock.Object, 'DocumentType'); switch (contentType) case 'RTF' dbFile = sprintf('%s.rtf', tempname); dbFiles = [dbFiles {dbFile}]; %#ok<AGROW> docblock('blk2file',docBlock.Object, dbFile); add(ch, DOCXSubDoc(dbFile)); case 'HTML' dbFile = sprintf('%s.html', tempname); dbFiles = [dbFiles {dbFile}]; %#ok<AGROW> docblock('blk2file',docBlock.Object, dbFile); add(ch, HTMLFile(dbFile)); case 'Text' dbFile = sprintf('%s.text', tempname); dbFiles = [dbFiles {dbFile}]; %#ok<AGROW> docblock('blk2file',docBlock.Object, dbFile); add(ch, Paragraph(fileread(dbFile))) end end if isempty(docBlocks) add(ch, 'This system lacks documentation'); end add(rpt, ch); end close(rpt);
Используйте docview, чтобы скопировать соединенное содержимое RTF в отчет, обновить TOC отчета и поля номера страницы, и закрыть документ и Word..
docview(rpt.OutputPath, 'unlinkdocxsubdoc', 'updatedocxfields', 'closedoc', 'closeapp');
Только теперь он безопасный удалить временные файлы, для которых вы использовали сохранить извлеченное содержимое DocBlock.
nFiles = numel(dbFiles); for i = 1:nFiles delete(dbFiles{i}) end