The print
statement prints the contents of a figure window to a file, so you have to plot your image first:
image(im); % Plot image
set(gca, 'Visible', 'off', ... % Turn off axes visibility
'Position', [0 0 1 1]); % and make axes fill figure window
hFigure = gcf; % Get handle to figure
pos = get(hFigure, 'Position'); % Get current figure position
set(hFigure, 'Position', [pos(1:2) size(im, 2) size(im, 1)]); % Set position so image
% is scaled properly
Then you can create a COM server and print the figure to an Excel file like so:
excel = actxserver('Excel.Application'); % Create server object
excelWorkbook = excel.Workbooks.Add(1); % Add a workbook
excelSheet = excel.ActiveSheet; % Get the active sheet
dpi = get(groot, 'ScreenPixelsPerInch'); % Get screen dpi
print(hFigure, sprintf('-r%d', dpi), ... % Print the figure at the screen resolution
'-clipboard', '-dbitmap'); % to the clipboard as a bitmap
excelSheet.Range('B2').PasteSpecial(); % Paste from clipboard (top left corner
% of image will be in the cell 'B2')
excelSheet.Range('B2').RowHeight = ... % Set cell height to image height
excelSheet.Shapes.Item(1).Height;
widthScale = excelSheet.Range('B2').ColumnWidth./... % Column width (in characters)
excelSheet.Range('B2').Width; % Column width (in points)
excelSheet.Range('B2').ColumnWidth = ... % Set cell width to scaled image width
excelSheet.Shapes.Item(1).Width.*widthScale;
excelWorkbook.SaveAs('figtest.xlsx'); % Save workbook to a file
excelWorkbook.Close(); % Close workbook
excel.Quit(); % Quit server
excel.delete(); % Delete server object
The above attempts to scale the cell to fit the entire image. This works for the row height, but the column width is off for some reason. There seems to be a lot of difficulty in determining the proper scaling, since the column width is defined in terms of characters and the image width is defined in terms of points/inches. I'm not sure if there's a good workaround for this.
As an example, here's what the results look like for the sample MATLAB image 'peppers.png'
:
