How do I add multiple .PNG files to an existing PowerPoint (.pptx) file using a for loop?
44 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Brad
il 20 Gen 2016
Commentato: Sean de Wolski
il 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 Commenti
Risposta accettata
Walter Roberson
il 21 Gen 2016
Modificato: Walter Roberson
il 21 Gen 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 Commenti
Ashwini More
il 6 Feb 2020
Is there any command to open the amended PowerPoint presentation after saving it to specified location?
Sean de Wolski
il 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
Più risposte (1)
Sean de Wolski
il 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 Commenti
Vedere anche
Categorie
Scopri di più su MATLAB Report Generator in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!