Графики matlab в word

Here is a full demo that shows you three different ways/options for saving axes into an existing Word Document using Word as an ActiveX server. This demo reads all PNG format images from the drive into the axes, and pastes them into a Word document that you specify:

clc;

fprintf(‘Beginning to run %s.m …n’, mfilename);

close all;

clear;

workspace;

format long g;

format compact;

startingFolder = pwd;

if ~isfolder(startingFolder)

startingFolder = pwd;

end

defaultFileName = fullfile(startingFolder, ‘*.doc*’);

[baseFileName, wordDocumentFolder] = uigetfile(defaultFileName, ‘Select a file’);

if baseFileName == 0

return;

end

wordFullFileName = fullfile(wordDocumentFolder, baseFileName)

if ~isfile(wordFullFileName)

msgbox(‘Error: %s must exist already, and it does not.’, wordFullFileName);

return;

end

imagesFolder = pwd;

fprintf(‘Now getting a list of image files in folder «%s».n’, imagesFolder);

filePattern = fullfile(imagesFolder, ‘*.png’);

fileList = dir(filePattern);

if isempty(fileList)

[~, ~, ext] = fileparts(filePattern);

warningMessage = sprintf(‘No %s format images found in foldern%snnExiting.’, ext, imagesFolder);

uiwait(warndlg(warningMessage));

return;

end

numberOfFiles = length(fileList);

fprintf(‘MATLAB is launching Word as an ActiveX server…n’);

Word = actxserver(‘Word.Application’);

fprintf(‘Word is now opening «%s» …n’, wordFullFileName);

Word.Documents.Open(wordFullFileName);

fprintf(‘Document «%s» has been opened in Word. Now making it visible.n’, wordFullFileName);

Word.Visible = true;

Word.Selection.ParagraphFormat.Alignment = 0;

hFig = figure;

for k = 1 : numberOfFiles

pictureFullFileName = fullfile(fileList(k).folder, fileList(k).name);

fprintf(‘Reading in %s, and pasting onto document.n’, fileList(k).name);

theImage = imread(pictureFullFileName);

imshow(theImage);

hFig.WindowState = ‘maximized’;

caption = sprintf(‘#%d of %d : %s’, k, numberOfFiles, fileList(k).name);

title(caption, ‘FontSize’, 15, ‘Interpreter’, ‘none’);

drawnow;

pause(0.6);

copygraphics(gca);

Word.Selection.Paste;

end

close(hFig);

fprintf(‘Now saving Word document «%s».n’, wordFullFileName);

Word.ActiveDocument.Save();

fprintf(‘Now shutting down the Word ActiveX server.n’);

Word.Quit;

clear(‘Word’);

promptMessage = sprintf(‘Done pasting %d images into Word.nDo you want to open the document in Word?’, numberOfFiles);

titleBarCaption = ‘Continue?’;

buttonText = questdlg(promptMessage, titleBarCaption, ‘Yes — Continue’, ‘No — Quit’, ‘Yes — Continue’);

if contains(buttonText, ‘Yes’, ‘IgnoreCase’, true)

winopen(wordFullFileName);

end

fprintf(‘Done running %s.m …n’, mfilename);

0 / 0 / 0

Регистрация: 15.11.2011

Сообщений: 9

1

15.11.2011, 13:36. Показов 11890. Ответов 5


Студворк — интернет-сервис помощи студентам

Есть следующий вопрос: можно ли экспортировать значения переменных и графики из Матлаба в Ворд? И если можно, то как это делается стандартными средствами?
Почитал про m-книги, однако, если я правильно понял, то m-книги позволяют лишь запускать функции матлаба из ворда, а это не совсем то, что нужно.
Спасибо.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

15.11.2011, 13:36

Ответы с готовыми решениями:

импорт из matlab в MsWord
здравствуйте. есть ли возможность читать из matlab текстовые документы doc, созданные в micrasoft…

Экспорт из Matlab в Excel
Здравствуйте. Имеется файл .mat, состоящий из одной длинной (до 1 млн. значений) строки. Необходимо…

Графики в Matlab
Задание 2. На одном графике построить 3 кривые: соответствующую первому слагаемому (красная…

графики в Matlab
Здравствуйте! Подскажите пожалуйста, как построить график с двумя и более движущимися точками,…

5

0 / 0 / 0

Регистрация: 15.11.2011

Сообщений: 9

17.11.2011, 18:53

 [ТС]

2

Неужели никто на Киберфоруме не может подсказать?!



0



128 / 127 / 10

Регистрация: 09.11.2010

Сообщений: 200

18.11.2011, 04:16

3

можно ли экспортировать значения переменных и графики из Матлаба в Ворд

Если честно, то не совсем понятно задание. Вам нужно экспортировать данные в Ворд в каком виде? Как картинку, как таблицу или что-то ещё? Не понятно чем именно не устраивают м-книги.



0



0 / 0 / 0

Регистрация: 15.11.2011

Сообщений: 9

18.11.2011, 16:59

 [ТС]

4

Постараюсь уточнить вопрос. Запускаю скрипт в матлабе. Получаю результаты в виде значений набора переменных. Есть необходимость эти переменные экспортировать в определенные места документа ворд.

То же с графиками.

М-книги же делают немного другое: сам матлабовский скрипт запускается из ворда. В этом проблема.
Спасибо.



0



128 / 127 / 10

Регистрация: 09.11.2010

Сообщений: 200

18.11.2011, 17:14

5

Что Вам мешает скопировать данные из командного окна Матлаб и вставить их в Ворд?

Не знаю поможет ли Вам, но посмотрите на оформление отчётов в Матлаб.

Миниатюры

Экспорт переменных и графики из MatLab в MSWord
 

Экспорт переменных и графики из MatLab в MSWord
 



1



0 / 0 / 0

Регистрация: 15.11.2011

Сообщений: 9

18.11.2011, 17:30

 [ТС]

6

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



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

18.11.2011, 17:30

Помогаю со студенческими работами здесь

Графики в matlab
Написал свой код , который выводит 3 графика , но параболу немного странно выводит , подскажите ,…

Графики в Matlab.
Помогите пожалуста с лабой…завтра сдавать, а сделать не получается…=(
Был бы очень…

Графики в Matlab
>> f=0:0.1:pi;polar(f,-((5*cos(2*f))/cos(f)));grid
??? Error using ==> polar at 61
THETA and RHO…

Экспорт графики из отчета в word
Как сделать так чтобы картинка, (логотип фирмы), отображаемая в отчете, экспортировалась бы и в…

Экспорт графика из Matlab в Excel
Добрый день!

Не нашел информации по вставке графика из матлаба в эксель…
Например, имею…

Экспорт данных из ANSYS в Matlab
Здравствуйте, уважаемые, у меня возникла следующая задача: необходимо рассчитанные в ANSYS Maxwell…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

6

Код: Выделить всё

function WriteToWordFromMatlab
% -------------------------------------------------------------------
% File: WriteToWordFromMatlab
% Descr:  This is an example of how to control MS-Word from Matlab.
%         With the subfunctions below it is simple to automatically
%         let Matlab create reports in MS-Word.
%         This example copies two Matlab figures into MS-Word, writes
%         some text and inserts a table.
%         Works with MS-Word 2003 at least.
% Created: 2005-11-22 Andreas Karlsson
% History:
% 051122  AK  Modification of 'save2word' in Mathworks File Exchange   
% 060204  AK  Updated with WordSymbol, WordCreateTable and "Flying Start" section
% 060214  AK  Pagenumber, font color and TOC added
% -------------------------------------------------------------------

   WordFileName='TestDoc.doc';
   CurDir=pwd;
   FileSpec = fullfile(CurDir,WordFileName);
   [ActXWord,WordHandle]=StartWord(FileSpec);

        fprintf('Document will be saved in %sn',FileSpec);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
%Section 1
    %%create header in word       
    Style='Heading 1'; %NOTE! if you are NOT using an English version of MSWord you get
    % an error here. For Swedish installations use 'Rubrik 1'.
    TextString='Example of Report Generation from Matlab';
    WordText(ActXWord,TextString,Style,[0,2]);%two enters after text

        Style='Normal';
    TextString='This is a simple example created by Andreas Karlsson, Sweden. ';   
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text
    TextString='Updated a sunny day, in February 2006, with -10 ';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    WordSymbol(ActXWord,176);%176 is the degree-symbol
    TextString='C. ';
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text

        TextString='The script will just insert a table and two figures into this document. ';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    TextString='Last section is a short introduction for the interested users out there. ';
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text

        TextString='My intention with this demo is to encourage you to let your powerful computer do the';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    TextString=' "monkey-job" such as inserting figures into MS-Word and writing standard reports. ';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    TextString='Hopefully these simple lines will help you getting more time for funny coding';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    TextString=' and problem solving, increasing productivity in other words ';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    TextString='by spending less time in Microsoft Office programs. ';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter

    TextString='Happy coding!';
    WordText(ActXWord,TextString,Style,[1,1]);%enter before and after text   
    ActXWord.Selection.InsertBreak; %pagebreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
%Section 3
    style='Heading 1';
    text='Table of Contents';
    WordText(ActXWord,text,style,[1,1]);%enter before and after text
    WordCreateTOC(ActXWord,1,3);
    ActXWord.Selection.InsertBreak; %pagebreak

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
%Section 3
    style='Heading 1';
    text='Data From Matlab';
    WordText(ActXWord,text,style,[1,1]);%enter before and after text

        Style='Heading 2';
    TextString='The Self-Explaining Table';
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text
    %the obvious data
    DataCell={'Test 1', num2str(0.3) ,'Pass';
              'Test 2', num2str(1.8) ,'Fail'};
    [NoRows,NoCols]=size(DataCell);         
    %create table with data from DataCell
    WordCreateTable(ActXWord,NoRows,NoCols,DataCell,1);%enter before table

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Section 4
    figure;plot([1:10]);title('Figure 1');xlabel('Time [s]');ylabel('Amplitude [A]')     
    %insert the figure
    TextString='First figure';
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text
    FigureIntoWord(ActXWord);

        TextString='Second figure';
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text 
    figure;plot([1:19],[1:10,9:-1:1]);title('Figure 2');xlabel('Time [s]');ylabel('Amplitude [A]');legend('Signal 1',2)
    FigureIntoWord(ActXWord);
    ActXWord.Selection.InsertBreak; %pagebreak

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
%Section 5
    Style='Heading 1';
    TextString='Flying Start';
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text
    Style='Normal';
    TextString='Find out how to do new things in MS-Word by using the "Record Macro"-function ';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    TextString='and look at the Visual Basic commands used.';
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text

        TextString='In Matlab you find the available properties by using get(ActXWord), for top interface,';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    TextString=' and further on with for example get(ActXWord.Selection).';     
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text

        TextString='Then find the methods usable from Matlab by using the invoke-function in Matlab ';
    WordText(ActXWord,TextString,Style,[0,0]);%no enter
    TextString='e.g. invoke(ActXWord.Selection). See the output of that call below. ';     
    WordText(ActXWord,TextString,Style,[0,1]);%enter after text

    TextString='Set a breakpoint here and play around with these commands...';
    WordText(ActXWord,TextString,Style,[0,1],'wdColorRed');%red text and enter after text

    %Make a long list of some of the methods available in MS-Word
    Category='Selection'; % Category='ActiveDocument';
    PrintMethods(ActXWord,Category)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       
%add pagenumbers (0=not on first page)
    WordPageNumbers(ActXWord,'wdAlignPageNumberRight');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       
    %Last thing is to replace the Table of Contents so all headings are
    %included.
    %Selection.GoTo What:=wdGoToField, Which:=wdGoToPrevious, Count:=1, Name:= "TOC"
    WordGoTo(ActXWord,7,3,1,'TOC',1);%%last 1 to delete the object
    WordCreateTOC(ActXWord,1,3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       
    CloseWord(ActXWord,WordHandle,FileSpec);   
    close all;
return

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% SUB-FUNCTIONS
% Creator Andreas Karlsson; andreas_k_se@yahoo.com
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [actx_word,word_handle]=StartWord(word_file_p)
    % Start an ActiveX session with Word:
    actx_word = actxserver('Word.Application');
    actx_word.Visible = true;
    trace(actx_word.Visible); 
    if ~exist(word_file_p,'file');
        % Create new document:
        word_handle = invoke(actx_word.Documents,'Add');
    else
        % Open existing document:
        word_handle = invoke(actx_word.Documents,'Open',word_file_p);
    end           
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function WordGoTo(actx_word_p,what_p,which_p,count_p,name_p,delete_p)
    %Selection.GoTo(What,Which,Count,Name)
    actx_word_p.Selection.GoTo(what_p,which_p,count_p,name_p);
    if(delete_p)
        actx_word_p.Selection.Delete;
    end

return

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function WordCreateTOC(actx_word_p,upper_heading_p,lower_heading_p)
%      With ActiveDocument
%         .TablesOfContents.Add Range:=Selection.Range, RightAlignPageNumbers:= _
%             True, UseHeadingStyles:=True, UpperHeadingLevel:=1, _
%             LowerHeadingLevel:=3, IncludePageNumbers:=True, AddedStyles:="", _
%             UseHyperlinks:=True, HidePageNumbersInWeb:=True, UseOutlineLevels:= _
%             True
%         .TablesOfContents(1).TabLeader = wdTabLeaderDots
%         .TablesOfContents.Format = wdIndexIndent
%     End With
    actx_word_p.ActiveDocument.TablesOfContents.Add(actx_word_p.Selection.Range,1,...
        upper_heading_p,lower_heading_p);

        actx_word_p.Selection.TypeParagraph; %enter 
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function WordText(actx_word_p,text_p,style_p,enters_p,color_p)
   %VB Macro
   %Selection.TypeText Text:="Test!"
   %in Matlab
   %set(word.Selection,'Text','test');
   %this also works
   %word.Selection.TypeText('This is a test');   
    if(enters_p(1))
        actx_word_p.Selection.TypeParagraph; %enter
    end
%   actx_word_p.Selection.Style = style_p;
    if(nargin == 5)%check to see if color_p is defined
        actx_word_p.Selection.Font.Color=color_p;     
    end

       actx_word_p.Selection.TypeText(text_p);
    actx_word_p.Selection.Font.Color='wdColorAutomatic';%set back to default color
    for k=1:enters_p(2)   
        actx_word_p.Selection.TypeParagraph; %enter
    end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function WordSymbol(actx_word_p,symbol_int_p)
    % symbol_int_p holds an integer representing a symbol,
    % the integer can be found in MSWord's insert->symbol window   
    % 176 = degree symbol
    actx_word_p.Selection.InsertSymbol(symbol_int_p);
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function WordCreateTable(actx_word_p,nr_rows_p,nr_cols_p,data_cell_p,enter_p)
    %Add a table which auto fits cell's size to contents
    if(enter_p(1))
        actx_word_p.Selection.TypeParagraph; %enter
    end
    %create the table
    %Add = handle Add(handle, handle, int32, int32, Variant(Optional))
    actx_word_p.ActiveDocument.Tables.Add(actx_word_p.Selection.Range,nr_rows_p,nr_cols_p,1,1);
    %Hard-coded optionals                     
    %first 1 same as DefaultTableBehavior:=wdWord9TableBehavior
    %last  1 same as AutoFitBehavior:= wdAutoFitContent

         %write the data into the table
    for r=1:nr_rows_p
        for c=1:nr_cols_p
            %write data into current cell
            WordText(actx_word_p,data_cell_p{r,c},'Normal',[0,0]);

                        if(r*c==nr_rows_p*nr_cols_p)
                %we are done, leave the table
                actx_word_p.Selection.MoveDown;
            else%move on to next cell
                actx_word_p.Selection.MoveRight;
            end           
        end
    end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function WordPageNumbers(actx_word_p,align_p)
    %make sure the window isn't split
    if (~strcmp(actx_word_p.ActiveWindow.View.SplitSpecial,'wdPaneNone'))
        actx_word_p.Panes(2).Close;
    end
    %make sure we are in printview
    if (strcmp(actx_word_p.ActiveWindow.ActivePane.View.Type,'wdNormalView') | ...
        strcmp(actx_word_p.ActiveWindow.ActivePane.View.Type,'wdOutlineView'))
        actx_word_p.ActiveWindow.ActivePane.View.Type ='wdPrintView';
    end
    %view the headers-footers
    actx_word_p.ActiveWindow.ActivePane.View.SeekView='wdSeekCurrentPageHeader';
    if actx_word_p.Selection.HeaderFooter.IsHeader
        actx_word_p.ActiveWindow.ActivePane.View.SeekView='wdSeekCurrentPageFooter';
    else
        actx_word_p.ActiveWindow.ActivePane.View.SeekView='wdSeekCurrentPageHeader';
    end
    %now add the pagenumbers 0->don't display any pagenumber on first page
     actx_word_p.Selection.HeaderFooter.PageNumbers.Add(align_p,0);
     actx_word_p.ActiveWindow.ActivePane.View.SeekView='wdSeekMainDocument';
return

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function PrintMethods(actx_word_p,category_p)
    style='Heading 3';
    text=strcat(category_p,'-methods');
    WordText(actx_word_p,text,style,[1,1]);           

        style='Normal';   
    text=strcat('Methods called from Matlab as: ActXWord.',category_p,'.MethodName(xxx)');
    WordText(actx_word_p,text,style,[0,0]);           
    text='Ignore the first parameter "handle". ';
    WordText(actx_word_p,text,style,[1,3]);           

        MethodsStruct=eval(['invoke(actx_word_p.' category_p ')']);
    MethodsCell=struct2cell(MethodsStruct);
    NrOfFcns=length(MethodsCell);
    for i=1:NrOfFcns
        MethodString=MethodsCell{i};
        WordText(actx_word_p,MethodString,style,[0,1]);           
    end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function FigureIntoWord(actx_word_p)
   % Capture current figure/model into clipboard:
   print -dmeta
   % Find end of document and make it the insertion point:
   end_of_doc = get(actx_word_p.activedocument.content,'end');
   set(actx_word_p.application.selection,'Start',end_of_doc);
   set(actx_word_p.application.selection,'End',end_of_doc);
   % Paste the contents of the Clipboard:
    %also works Paste(ActXWord.Selection)
   invoke(actx_word_p.Selection,'Paste');
    actx_word_p.Selection.TypeParagraph; %enter   
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function CloseWord(actx_word_p,word_handle_p,word_file_p)
    if ~exist(word_file_p,'file')
        % Save file as new:
        invoke(word_handle_p,'SaveAs',word_file_p,1);
    else
        % Save existing file:
        invoke(word_handle_p,'Save');
    end
    % Close the word window:
    invoke(word_handle_p,'Close');           
    % Quit MS Word
    invoke(actx_word_p,'Quit');           
    % Close Word and terminate ActiveX:
    delete(actx_word_p);           
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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

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

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

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

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

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

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

form

Также добавим обработчики событий на кнопки.
Для кнопки 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.

Is there any efficient way to import Matlab graphs to word file, I’ve lots of graphs and I won’t be partial to import them individually, is there any way to do it programmatically?

asked Aug 22, 2014 at 12:02

Rajab's user avatar

3

Load 6 more related questions

Show fewer related questions

Понравилась статья? Поделить с друзьями:
  • График чувствительности проекта в excel
  • График чувствительности npv в excel
  • График числового ряда в excel что это
  • График часов сотрудников excel
  • График цикла в цикле в excel