パスワードを忘れた? アカウント作成
13769250 journal
日記

route127の日記: スクリプトから生成したパワポのスライドの一部でフォントが勝手に変わる 2

日記 by route127

MS PowerPoint2010でプレゼンテーション末尾のスライドをコピーし、タイトル部分を予め作っておいた箇条書きタイトルに置換するスクリプトを書いた。
出来上がったスライドを見てみると特定のスライドでフォントが「MS Pゴシック 見出し」から「PMingLiU 見出し」に変わってしまっていた。

VBAによる自動化を批難したことを曝されたお局OLの怨霊の仕業かと思ったが、恐らくは特定の文字が使われている場合に起きる問題であるようだ。
手間を掛けたくなかったので深く追求はせず、スライド生成時にフォントも指定することにした。

その前に生成済みスライドのフォントを変えようと試みてもみたがうまく行かなかった。
Font.NameFarEastが「MS Pゴシック 見出し」でも「PMingLiU 見出し」でも+mj-ea(major east asia の略らしい)と表現されてるので、なんかその辺の仕様をちゃんと調べればいいのかもしれないがそこまで根気が続かなかった。

use strict;
use warnings;
use Win32::OLE;

my $pp = Win32::OLE->new('PowerPoint.Application', 'Quit');
$pp->{DisplayAlerts} = 1;
$pp->{Visible} = 1;

my $file = 'C:\hoge\fuga\test.pptx';
my $presentation = $pp->Presentations->Open($file, 1);
my @slides = Win32::OLE::Enum->new($presentation->Slides)->All;

foreach my $title (<DATA>){
    $slides[$#slides]->Copy;
    $presentation->Slides->Paste;
    @slides = Win32::OLE::Enum->new($presentation->Slides)->All; #インデックス更新
    $slides[$#slides]->Shapes->{'Title'}{'TextFrame'}{'TextRange'}{'Text'} = $title;

    #フォントがおかしくなる対策
    $slides[$#slides]->Shapes->{'Title'}{'TextFrame'}{'TextRange'}{'Font'}{'NameAscii'} = 'MS Pゴシック';
    $slides[$#slides]->Shapes->{'Title'}{'TextFrame'}{'TextRange'}{'Font'}{'NameFarEast'} = 'MS Pゴシック';
}
$presentation->SaveAs($file);
$presentation->Close;

__DATA__
タイトル1
タイトル2
タイトル3

typodupeerror

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

読み込み中...