route127の日記: ぱわぽ分割スクリプト 2
M$のpowerpointで印刷原稿を作っていた。
パワポで版下を作っている時点で既に色々間違っている気がするが、最初excelで作ろうとしてたよりはマシのはず。
聞くところによれば近所の郷土史家も著書をパワポで書いているそうだし割とパワポ版下層は居るのかもしれない。
ただ150ページの原稿で2ページ位作ったところで貼りこんだ画像素材が重くて仕事にならなくなってきたので1ページを1ファイルにしようとPerlでスクリプトを組んだ。
src.pptxを001.pptx、002.pptx、…と分割していくのだが、これは「src.pptxを開き、任意のスライド1枚以外を削除して別名保存」をスライド枚数分繰り返しているだけなので大したことはしていない。
ただ当初そのループを$presentation->Slideで回そうとして失敗した。
$presentation->Slide->Itemのインデックスでループを回してもいいんだろうけど(そちらの方が速そう)、mapやgrepを使って書きたかった。
その為に一度Win32::OLEで受けてperlの配列にした。
@slides = Win32::OLE::Enum->new($presentation->Slides)->All
のところ。
使い捨てのスクリプトなので用済みではあるが、見直してみると毎度ファイル開閉しなければもっと高速化できるのではないか(別名保存ではなくて予めスライド枚数文ファイルを複製しておく?)とか、スクリプトの冗長なところを短縮出来るのではないか(ワンライナにできたりしないか)とか思うがそれは読者への課題とする(古い本によくある言い回し)。
use strict;
use warnings;
use Win32::OLE;
$Win32::OLE::Warn = 3;
use Win32::OLE::Const 'Microsoft PowerPoint';
use Win32::OLE::Enum;
use Cwd;
use utf8;my $pp = Win32::OLE->new('PowerPoint.Application', 'Quit');
$pp->{DisplayAlerts} = 1;
$pp->{Visible} = 1;my $filename = 'C:\hoge\huga\src.pptx';
my $presentation = $pp->Presentations->Open($filename, 1);
my @slides = Win32::OLE::Enum->new($presentation->Slides)->All;
$presentation->Close;foreach my $page (0..$#slides){
my $input = 'C:\hoge\fuga\src.pptx';
my $output = 'C:\hoge\fuga\\' . sprintf("%03d", $page + 1) . '.pptx';
my $presentation = $pp->Presentations->Open($input, 1);
my @slides = Win32::OLE::Enum->new($presentation->Slides)->All;
map{$slides[$_]->Delete}grep{$_!=$page}0..$#slides;
$presentation->SaveAs($output);
$presentation->Close;
}
編集を終えた連番パワポファイルの結合も一応作ったが大して面白くはない。
pptxファイルを2つ開いて2つ目から1つ目にスライドをコピペするのみ。
$slides2[0]->Copy;
$presentation1->Slides->Paste;
スタイル管理とかどうしてるのかしらん (スコア:2)
(高校〜)JG→(大学〜)PageMaker→InDesignをワープロ替わりに使ってたので,その辺りの感覚はてんで解らず。
Re:スタイル管理とかどうしてるのかしらん (スコア:1)
>スタイル管理
してない、と言い切っていいものなのかどうか。
フォントとポイント数位はいじりますけど、そもそもの内容が現場写真メインなので文章はキャプションくらいしかなくて行間を調整したり [office.com]とかもないので。
なんかDTPソフトとかでカッコよく資料作れたら楽しそうにも思えるけれど色々設定とか大変そうだし、適当な資料をExcelで量産する日々にあって自分から触りに行く機会も中々なさそう。