MATLAB Answers


copy graphic to Excel

Asked by Jason
on 13 May 2011

How can I take the code below to just copy the graphic on axes component (axes1) to clipboard. I then have code to paste it to excel. It currently copies all of my matlab screen.

   print -dmeta;   %.................Copying to clipboard




No products are associated with this question.

2 Answers

Answer by Andy
on 13 May 2011

You could use Yair Altman's screencapture utility from the FEX:

screencapture('handle',ax, 'filename', fn); % save the graph in file fn
          20,... % distance from left of sheet
          20,... % distance from top of sheet
          600,... % width
          400); % height

Note that you will need to have opened an actxserver connection to MATLAB. In the above, ax is the handle to your axes, fn is the file where your image is saved, and exlSheet is an Excel Sheet object.

EDIT: Here is some sample actxserve code. I have had a chance to test this and it works for me. Refer to if needed.

x = 0:0.1:10;
y = sin(x);
f = figure;
ax = axes('parent',f);
fn = fullfile(pwd,'myplot.bmp');
screencapture('handle',ax, 'filename', fn);
e = actxserver('Excel.application');
eW = e.Workbooks;
eF = eW.Add; % start a new file; use Open method for existing files
eS = eF.ActiveSheet;
e.Visible = 1; % Excel window won't show up by default
  20,... % distance from left of sheet
  20,... % distance from top of sheet
  400,... % width
  300); % height


on 16 May 2011

I'm not quite sure what you mean. Do you have multiple figures? If so, you can type at the command line:

figurelist = findall(0, 'type', 'figure');

If you mean you want to see all of the handles to controls in your GUI figure, then you only need to print the handles structure. (Alternatively, if you open your GUI in GUIDE, you can right click on a control, open the property inspector, and look at its Tag property.)

on 16 May 2011

Im, still confused over the figure1 issue. On my GUI created in GUIDE, I drag an axes component and leave its tag as default - axes1. I then plot to axes 1 by :

I do not create a figure.

So writing hf=handles.figure1 and then print(handles.figure1, '-dmeta');

just copys the whole GUI to clipboard, not the axes 1 component that I am after. Is it worth sharing my files?


on 16 May 2011

That's correct. It's a documented limitation of the print function that it cannot take as an argument, for example, just the axes handle. Yair Altman's screencapture utility that I linked to before CAN capture only the axes without copying the whole figure. I'm not at MATLAB right now, so I can't be certain, but I don't think there is a way for the screencapture utility to write to the system clipboard. That's why I suggested writing to a file and then importing the file into Excel. I really think this is the best solution, but when I'm next using MATLAB I can try to think of something that doesn't produce the intermediate file.

Answer by Laura Proctor
on 13 May 2011
hf = figure;


Matt Tearle
on 16 May 2011

The parent of axes1.

hf = get(handles.axes1,'parent');

will find it for you, if it's not called figure1.

on 17 May 2011

It still copies the whole GUI and not just the graphic in the axes component.

on 17 May 2011

Yes, that has been pointed out to you before. I have updated the code in my answer with tested code which works correctly and copies only the axes.

Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!