Формирования Microsoft Word отчетов в Matlab

MATLAB – это высокоэффективный язык инженерных и научных вычислений. Он поддерживает математические вычисления, визуализацию научной графики и программирование с использованием легко осваиваемого операционного окружения, когда задачи и их решения могут быть представлены в нотации, близкой к математической. Наиболее известные области применения системы MATLAB:
  • математика и вычисления;
  • разработка алгоритмов;
  • вычислительный эксперимент, имитационное моделирование, макетирование;
  • анализ данных, исследование и визуализация результатов;
  • научная и инженерная графика;
  • разработка приложений, включая графический интерфейс пользователя.

Часто при исследовании какой-либо системы, требуется производить неоднократные опыты, а после этого анализ снятых данных.Поэтому в данной статье я решил поделиться опытом формирования отчетов проделанной работы в Microsoft Word. Итак, начнем.

Создание модели «simulink»

Модель simulink будет представлять собой генератор «белого шума» и осциллограф снимающий значения.
Чтобы создать новую модель нажимаем на верхней панели инструментов «Simulink».В итоге мы должны получить следующую модель. Сохраняем ее под именем «test.mdl»


Создание формы(GUI)

Cоздадим графический интерфейс нашей программы, для этого в matlabe существует утилита GUI(builder), ее можно найти нажав пуск в главном окне, и выбрав пункт Matlab->GUI(builder).
Интерфейс этой утилиты прост, поэтому трудностей при создания формы не возникнет.
Поместим на форму две кнопки(start и save) и axes(сюда мы будем рисовать график). В итоге мы получим следующую форму.



Также добавим обработчики событий на кнопки.
Для кнопки start:

function Start_Callback(hObject, eventdata, handles)
open_system('test');//открытие симулинк модели
open_system('test/Scope');//открытие осциллографа 
set(handles.figure1, 'UserData',gcf);//запоминаем десриптор окна осциллографа
sim('test');//запуск модели симулик
axes(handles.axes1);
 x = -pi:pi/10:pi;
 plot(x);//рисуем простой график в axes

Для кнопки stop:
set(hObject,'Enable','off');//делаем не активной кнопку save
reporter(hObject, eventdata, handles);//вызываем функцию снятия скриншота формы
reporter_dop(hObject, eventdata, handles);//вызываем функцию снятия скриншота осциллографа
docrep;//сохраняем вcе word

Сохраняем форму под именем «testForm».

Коды функций reporter,reporter_dop,docrep
Каждую функцию следует поместить в отдельный файл с именем функции.
Код функции reporter:
function reporter(hObject, eventdata, handles)
dir = 'c:\';//директория, где будут храниться код.
n = 1;
if ~isempty(dir),
 pngFile = strcat(dir,'data-',num2str(n),'.png');
 scrshot = getframe(gcf);//снимаем скриншот,gcf дескриптор окна формы
 imwrite(scrshot.cdata,pngFile,'png','Transparency',get(gcf,'color'));//создаем файл картинки
end
funkname = 'скрин';
filename=sprintf('%s','data-',num2str(n));
pathname=dir;
//записываем данные в файл
if filename~=0
 [fid,message] = fopen(strcat(pathname,filename,'.txt'),'w');
 if fid~=-1 
 fprintf(fid,funkname);
 fprintf(fid,'\n[image]\n'); 
 fclose(fid);
 end
end


Функция reporter_dop имеет похожий код только вместо дескриптора формы берем дескриптор осциллографа.
Код сохранения в word:

function []=docrep()

dir = 'c:\';
n = 2;
list = [];
if exist(dir,'dir'),
 dotFile = strrep(mfilename('fullpath'),mfilename,'report.doc');//Шаблон файла word
 docFile = strcat(dir,'отчет.doc');
 Word = actxserver('Word.Application'); //Создаем COM Сервер Word записываем раннее подготовленные файлы
 %set(word,'Visible',1); 
 Doc = Word.Documents.Open(dotFile);
 Doc.SaveAs(docFile,1);
 Selection = Word.Selection;
 Selection.Start = Doc.Content.End;
 Selection.End = Doc.Content.End;
 FLI = Selection.ParagraphFormat.FirstLineIndent;
 for i = 1:n,
 pngFile = strcat(dir,'data-',num2str(i),'.png');
 txtFile = strcat(dir,'data-',num2str(i),'.txt');
 if exist(pngFile) & exist(txtFile), 
 fid = fopen(txtFile);
 while 1,
 tline = fgetl(fid);
 if ~ischar(tline), break; end;
 if strncmp(tline,'[image]',7),
 Selection.ParagraphFormat.Alignment = 1;
 Selection.ParagraphFormat.FirstLineIndent = 0;
 Selection.InlineShapes.AddPicture(pngFile); 
 Selection.TypeParagraph;
 Selection.TypeText(strrep(tline,'[image]',''));
 Selection.TypeParagraph;
 Selection.ParagraphFormat.Alignment = 0;
 Selection.ParagraphFormat.FirstLineIndent = FLI; 
 elseif strncmp(tline,'[i]',3),
 Selection.Font.Italic = 1;
 Selection.TypeText(strrep(tline,'[i]',''));
 Selection.Font.Italic = 0; 
 else
 Selection.TypeText(tline);
 end;
 Selection.TypeParagraph;
 end
 fclose(fid);
 end;
 end;
 Doc.Close; 
 Word.Quit;
 disp(strcat('Создан файл отчета',dir));
else disp('Ошибка при создании файла отчета...');
end;



Запуск программы

Чтобы запустить нашу программу, после запуска Matlab, необходимо добавить путь к директории с нашими файлами командой: addpath путь к директории.
В итоге после работы программы мы получим файл отчет.doc.

Bcе исходники можно скачать по ссылке http://s-cd.com/test.zip.

При написании активно использовалась документация Matlab. Официальный сайт http://www.mathworks.com.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.