Формирования Microsoft Word отчетов в Matlab
MATLAB – это высокоэффективный язык инженерных и научных вычислений. Он поддерживает математические вычисления, визуализацию научной графики и программирование с использованием легко осваиваемого операционного окружения, когда задачи и их решения могут быть представлены в нотации, близкой к математической. Наиболее известные области применения системы MATLAB:
Часто при исследовании какой-либо системы, требуется производить неоднократные опыты, а после этого анализ снятых данных.Поэтому в данной статье я решил поделиться опытом формирования отчетов проделанной работы в Microsoft Word. Итак, начнем.
Модель simulink будет представлять собой генератор «белого шума» и осциллограф снимающий значения.
Чтобы создать новую модель нажимаем на верхней панели инструментов «Simulink».В итоге мы должны получить следующую модель. Сохраняем ее под именем «test.mdl»

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

Также добавим обработчики событий на кнопки.
Для кнопки start:
Для кнопки stop:
Сохраняем форму под именем «testForm».
Код функции reporter:
Функция reporter_dop имеет похожий код только вместо дескриптора формы берем дескриптор осциллографа.
Код сохранения в word:
Чтобы запустить нашу программу, после запуска Matlab, необходимо добавить путь к директории с нашими файлами командой: addpath путь к директории.
В итоге после работы программы мы получим файл отчет.doc.
Bcе исходники можно скачать по ссылке http://s-cd.com/test.zip.
При написании активно использовалась документация Matlab. Официальный сайт http://www.mathworks.com.
- математика и вычисления;
- разработка алгоритмов;
- вычислительный эксперимент, имитационное моделирование, макетирование;
- анализ данных, исследование и визуализация результатов;
- научная и инженерная графика;
- разработка приложений, включая графический интерфейс пользователя.
Часто при исследовании какой-либо системы, требуется производить неоднократные опыты, а после этого анализ снятых данных.Поэтому в данной статье я решил поделиться опытом формирования отчетов проделанной работы в 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 комментариев