Mファイルスクリプト​によるPPTファイル​のスライドのコピー&​ペースト

18 ビュー (過去 30 日間)
Hirokazu Masugami
Hirokazu Masugami 2018 年 6 月 5 日
回答済み: Hirokazu Masugami 2018 年 6 月 11 日
Mファイルスクリプトを使ってPPTファイルを編集する際に、 スライドをコピー&ペーストするにはどうすればいいでしょうか?
イメージとしては まず、テンプレートとして使いたいPPTファイル(タイトルページとコンテンツページによる2ページ構成) を開き、 コンテンツページをコピー&ペーストして、その中に情報を埋め込み、 最後におそらく残ってしまうであろう空のコンテンツページ(ページコピーのコピー元用)を削除して、 PPTを保存するようなことをしたいと考えています。

採用された回答

Takashi Ueno
Takashi Ueno 2018 年 6 月 8 日
MATLABでpptファイルを操作する場合、actxserverによってPowerPointのオートメーションサーバーを使用し、PowerPoint オブジェクトを操作することになります。
一例ですが、カレントディレクトリ上の'original.pptx'の2番目のスライドをコピーし、新規作成したスライドに挿入し、カレントディレクトリに'new.pptx'として保存する場合、以下のように行えます。
PowerPointのオブジェクトモデルを使用しているため、コマンドの詳細については、マイクロソフト社のリファレンス等をご参照ください。
% ActiveX オブジェクトを作成
ppt = actxserver('powerpoint.application');
ppt.Visible = 1;
% 新しいプレゼンテーションの作成
ppt_new=ppt.Presentations.Add();
% 新しいプレゼンテーションの0番目のスライドの後ろ(つまり1番目のスライド)に、
% 元のプレゼンテーションのi番目からj番目までのスライドをコピー
% 今回は2番目のスライドをコピー
ppt_new.Slides.InsertFromFile([pwd,'\original.pptx'],0,2,2);
% 保存
ppt_new.SaveAs([pwd,'\new.pptx'])
% 終了
ppt.Quit
ppt.delete

その他の回答 (1 件)

Hirokazu Masugami
Hirokazu Masugami 2018 年 6 月 11 日
ご回答ありがとうございます。
テンプレートのPPTファイルを’original.pptx’とすると、 ’original.pptx’が2ページ構成で、1ページ目がTitleスライド、2ページ目がContentスライドにっていると想定します。 新しいスライドが’new.pptx’とすると、 ’new.pptx’は1ページ目が’original.pptx’のTitleスライドに情報を追加したもの、 2ページ目以降は’original.pptx’のContentスライドに情報を追加したものとすると、 以下のようにすればよろしいでしょうか?
% ActiveX オブジェクトを作成
ppt = actxserver('powerpoint.application');
ppt.Visible = 1;
% 新しいプレゼンテーションの作成
ppt_new=ppt.Presentations.Add();
% タイトルページの作成
ppt_new.Slides.InsertFromFile([pwd,'\original.pptx'],0,1,1);
i = 1
while dataEnd ~= 1
% コンテンツページの作成
slides = ppt_new.Slides.InsertFromFile([pwd,'\original.pptx'],i,2,2);
% スライドタイトルの設定
text=hs1.Title.TextFrame.TextRange;
set(text,'Text', [title_text, num2str(i)], 'Position',[10 10 10 10]))
% コンテンツの操作
hh = invoke(slides,'Item',i);
hs = hh.Shapes;
hp = invoke(hs,'AddTable', 3, 4, 60, 80, 600, 400);
hh = invoke(slides,'Item',i);
hs = hh.Shapes;
rect2 = [10 100 800 600];
set(figure(k),'Position',rect2)
hp = invoke(hs,'Paste');
set(hp,'Top',80)
set(hp,'Left',60)
hp = invoke(hs,'AddTable', 3, 4, 60, 80, 600, 400);
% ページ番号のインクリメント
i = i + 1;
end
% 保存
ppt_new.SaveAs([pwd,'\new.pptx'])
% 終了
ppt.Quit
ppt.delete
end

コミュニティ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!