How do I add multiple .PNG files to an existing PowerPoint (.pptx) file using a for loop?
    18 ビュー (過去 30 日間)
  
       古いコメントを表示
    
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 件のコメント
採用された回答
  Walter Roberson
      
      
 2016 年 1 月 21 日
        
      編集済み: Walter Roberson
      
      
 2016 年 1 月 21 日
  
      %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 件のコメント
  Ashwini  More
 2020 年 2 月 6 日
				Is there any command to open the amended PowerPoint presentation after saving it to specified location?
  Sean de Wolski
      
      
 2020 年 2 月 10 日
				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
その他の回答 (1 件)
  Sean de Wolski
      
      
 2020 年 2 月 4 日
        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 件のコメント
参考
カテゴリ
				Help Center および File Exchange で MATLAB Report Generator についてさらに検索
			
	製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



