Excel の値を PowerPoint へ自動流し込み

こんにちは、スクリプト担当のFです。

最近はアクセス解析の案件が増えており、PowerPoint を使う機会も多くなってきました。恥ずかしながらパワポは今までほとんど使ったことがなかったのでレポート作成には日々苦戦しております。そんなある日、Excel から PowerPoint へ値を持っていくためにコピペを繰り返しながら気づいたのですが、これこそ AppleScript でやればいいじゃないか!? と天からの閃きが! というかなんで今まで気づかなかったのか、まさに灯台下暗し。複数アプリケーションの連携ならば AppleScript の最も得意とするところではないか。というわけでやってみました。

● Office のバージョン

私のメインの作業環境は Mac OS X ですが、クライアントはほぼ Windows です。PowerPoint のファイルを納品する必要があったので Windows で作業しなくてはという先入観があったのですが、よく考えたら Office の現行バージョンは 2016 で Mac も Win も同じです。以前のバージョンだとレイアウトが崩れるといった致命的な問題がありましたが、今のバージョンは環境が違っても大きな問題はなさそうです。

macppt winppt

Mac版 PowerPoint 2016

Windows版 PowerPoint 2016

● Excel と PowerPoint の連動とは

最初、Excel から PowerPoint へは自動的にリンクができるのかと勝手に思っていましたが、そんな機能はないということに驚愕しました。いや厳密にはあるのですがExcel をそのままリンクする(参考: Excel ワークシートを PowerPoint に挿入する – PowerPoint)ということなんですね。DTP 的な発想だと Excel のセルから InDesign の表組を作成する手段をいろいろ考えたりするものですが、こっちの世界にはあまりいい方法がないのですねえ。同じ Office 間でスマートな連携ができないのはもどかしくも思います。ただ、Excel のグラフを PowerPoint にリンクできる機能はいいですね。

● PowerPoint で AppleScript を扱う

やっと本題です。そもそも AppleScript で PowerPoint を扱うことについての情報は異常に少なく、検索しても日本語のサイトはあまりヒットしません。ただ、まったくないというわけでもありません。Microsoft から PDF でドキュメントガイドが提供されています(PowerPoint AppleScript – Microsoft)。ですが、バージョンは2008で、基本的なことばかりで知りたい情報はありませんでした。

情報がなければ徹底的にトライあるのみということで、まずは選択範囲の表組を取得してみます。

table-object

PowerPoint で選択範囲の表組を取得

InDesign では単純に Selection と書けば取得できるのですが、PowerPoint では冗長な書き方になってしまいます。

セルごとに情報を取得してみます。

cell
PowerPoint で選択範囲の表組のセルを取得

cell が行、row が列を示しています。

セルの値を取得してみます。

cell
PowerPoint で選択範囲の表組のセルの値を取得

おわかりいただけますでしょうか。値の取得なのに、「セルの中(cell)」の「シェイプ(shape)」の「テキストフレーム(text frame)」の「テキストレンジ(text range)」の「コンテンツ(content)」…って長っ! こんな書き方になってしまいます。

なにはともあれ、表ごとにセルを取得して値を入れることはできそうです。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-25-13-55-03

PowerPoint で選択範囲の表組のセルに値を入れる。実行すると↓

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-25-13-55-20
(結果)値が入りました!

● Excel から PowerPoint の表へ

ここまでできれば、あとは自動流し込みの仕組みができます。サンプルとして Excel の選択したセルの値を PowerPoint の選択した表に流し込むスクリプトをつくってみました。

exceltoppt
Excel の選択したセルの値を PowerPoint の選択した表に流し込む

アクセス解析のレポートなどは、基本的に定型フォーマットの使い回しなので Excel の範囲は決めうちで OK です。PowerPoint もシェイプに名前をつけてスクリプトが判別することができるように仕込んでおけば自動処理が可能です。
さらに、Google アナリティクスからのデータ取得は Core Reporting API を使えばほぼ全自動でアクセス解析レポートを作成することができます。

これでもうコピペでひぃひぃ言ってた日々とおさらばできそうです(切実)!!