MATLAB Answers

How do I add multiple .PNG files to an existing PowerPoint (.pptx) file using a for loop?

121 views (last 30 days)
Brad
Brad on 20 Jan 2016
Commented: Sean de Wolski on 10 Feb 2020
Using MATLAB 2015a, I've been attempting to add numerous .png files to an existing PowerPoint 2010 presentation (.pptx) using the following code;
%
% Clear out all workspace variables, close all open figures, and clear the
% command window.
clear all;
close all;
clc;
% List all current folder contents ending with .png. Resulting names will
% appear in the order returned by the operating system.
files = dir('*.png');
% Create Common Object Model (COM) server so MATLAB can export data to
% PowerPoint
g = actxserver('powerpoint.application');
% Open PowerPoint and make it visible
g.Visible = 1;
Presentation = g.Presentation;
% Prompt the user for the PowerPoint file to amend
[fn, pn] = uigetfile('*.pptx', 'Select PowerPoint File To Amend');
filemane = fullfile(pn, fn);
Presentation = invoke(Presentation, 'open', filename);
% Get current number of slides
slide_count = get(Presentation.Slides, 'Count');
% Export all PNGs in the current directory to the PowerPoint file specified
% above. The following slides will be added to the END of the PowerPoint
% file. All slides will have a common title.
for i=1:length(files)
slide_count = int32(double(slide_count)+1);
slide = invoke(Presentation.Slides, 'Add', slide_count{i}, 11);
set(slide.Shapes.Title.Textframe.Textrange, 'Text', 'SomeTitle');
Image{i} = slide.Shapes.AddPicture(',Current Directory>\files(i).name', 'msoFalse', 'msoTrue', 0, 80, 720, 440);
end
% Save the amended PowerPoint presentation to the current directory
Presentation.SaveAs('<Currrent directory>\DRAFT.pptx');
% Close PowerPoint as a COM automation server
g.Quit;
g.delete;
However, I keep getting the following error:
Invoke Error, Dispatch Exception. Description: The specified file wasn't found.
The line in question is this:
Image{i} = slide.Shapes.AddPicture('C:\Users\onstottb\Documents\MATLAB\files(i).name', 'msoFalse', 'msoTrue', 0, 80, 720, 440);
It appears I am implementing something wrong, but I'm not sure where.
Any advice is greatly appreciated.
Thank you.

  0 Comments

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 21 Jan 2016
Edited: Walter Roberson on 21 Jan 2016
%removed the clear all, close all, clc, as they are irrelevant here and can only cause problems
project_dir = pwd(); %new
% List all current folder contents ending with .png. Resulting names will
% appear in the order returned by the operating system.
files = dir( fullfile(project_dir, '*.png')); %changed
% Create Common Object Model (COM) server so MATLAB can export data to
% PowerPoint
g = actxserver('powerpoint.application');
% Open PowerPoint and make it visible
g.Visible = 1;
Presentation = g.Presentation;
% Prompt the user for the PowerPoint file to amend
[fn, pn] = uigetfile('*.pptx', 'Select PowerPoint File To Amend');
filename = fullfile(pn, fn); %changed
Presentation = invoke(Presentation, 'open', filename);
% Get current number of slides
slide_count = get(Presentation.Slides, 'Count');
% Export all PNGs in the current directory to the PowerPoint file specified
% above. The following slides will be added to the END of the PowerPoint
% file. All slides will have a common title.
for i=1:length(files)
slide_count = int32(double(slide_count)+1);
slide = invoke(Presentation.Slides, 'Add', slide_count{i}, 11);
set(slide.Shapes.Title.Textframe.Textrange, 'Text', 'SomeTitle');
slidefile = fullfile(project_dir, files(i).name); %new
Image{i} = slide.Shapes.AddPicture(slidefile, 'msoFalse', 'msoTrue', 0, 80, 720, 440); %changed
end
% Save the amended PowerPoint presentation to the current directory
outfile = fullfile(project_dir, 'DRAFT.pptx'); %new
Presentation.SaveAs(outfile); %changed
% Close PowerPoint as a COM automation server
g.Quit;
g.delete;

  10 Comments

Show 7 older comments
Ashwini  More
Ashwini More on 6 Feb 2020
Is there any command to open the amended PowerPoint presentation after saving it to specified location?
Sean de Wolski
Sean de Wolski on 10 Feb 2020
winopen(path_to_file)
Or with the report generator you can control showing it/playing it etc:
https://www.mathworks.com/help/rptgen/ug/mlreportgen.utils.pptpres-class.html

Sign in to comment.

More Answers (1)

Sean de Wolski
Sean de Wolski on 4 Feb 2020
I'd strongly encourage you to look at the MATLAB Report Generator for this which has the ability to easily add or replace content in a presentation.

  0 Comments

Sign in to comment.

Sign in to answer this question.

Products