(Tips) PowerPoint ファイルの自動生成

概要

Ruby スクリプトを用いて PowerPoint ファイルを自動生成する方法を示します. win32ole というライブラリを用いて, Windows のアプリケーションを操作しています.

必要な環境

Windows 上であることが前提です.

  • Ruby (Windows 上での Ruby のインストールについてはページ末尾の参考資料などを参考にしてください)
  • win32ole ライブラリ (Ruby 1.8 以降であれば標準でインストールされています)
  • PowerPoint

サンプルスクリプト

よく使いそうな命令をサンプルスクリプトとしてまとめました.

行っていること

  • PowerPoint アプリケーションの起動
  • PowerPoint ファイルの新規作成
  • スライド
    • 新規作成
    • サイズ, 総ページ数の取得
  • タイトルの書き換え
  • 画像
    • 挿入
    • リサイズ
    • 位置の変更
  • テキストボックス
    • 空のボックスの作成
    • 文字列の書き換え
    • 位置の変更
    • フォントサイズ変更
    • センタリング
  • ファイルに名前をつけて保存
  • PowerPoint アプリケーションの終了 (スクリプト末尾のコメントアウトを外してください)

実行方法

  • 既に PowerPoint を開いている場合は, 終了する
  • ページ下のほうにある「ソース」よりスクリプトをダウンロードする
  • <URL:http://ruby.gfd-dennou.org/products/gphys/tutorial2/ggraph_hop.htm> (GPhys, GGraph チュートリアル内) の一番最初の画像をダウンロードし, スクリプトと同じディレクトリに置く
    • それ以外の画像で行う場合はスクリプトの上の方にある imgpath の内容を書き換えてください.
  • もし output.ppt というファイルがある場合は削除するか, 移動しておく
    • output.ppt を出力先として指定しているためです. サンプルでは安全のため, output.ppt がある場合は上書きせずに異常終了するようにしています.
    • 違うファイル名で出力したい場合はスクリプトの上の方にある output の内容を書き換えてください.
  • コマンドプロンプトで以下を実行
> ruby demo_gen_ppt.rb
  • 少し待つと PowerPoint が立ち上がり, 目の前で自動的に作業が行われていく.
  • 動作が止まったら手で PowerPoint アプリケーションを終了する.
    • アプリケーションの終了も自動化したい場合はスクリプト末尾のコメントアウトを外してください.
  • 実行ディレクトリに output.ppt というファイルができている.

実行結果

生成された output.ppt を画像化したものです.

output_demo_gen_ppt.png

ソース

demo_gen_ppt.rb

require 'win32ole'

output = "output.ppt"   # 出力ファイル名
title = "Sample"        # タイトル
imgpath = "./ggraph_hop_irb01.png"   # 挿入する画像のパス (相対パス可)
text = "text"           # 挿入するテキスト
fontsize = 30           # 挿入するテキストのフォントサイズ

# 絶対パスの取得
def getAbsolutePath(path)
  fso = WIN32OLE.new('Scripting.FileSystemObject')
  return fso.GetAbsolutePathname(path)
end

# PowerPoint アプリケーションを開く
pp =  WIN32OLE.new('PowerPoint.Application')

# 事故防止のため, 既にファイルを開いている場合は処理をしない
if pp.Presentations.Count > 0 then
  puts "ERROR: Close all PowerPoint file and rerun this script."
  exit 1
end

# アプリケーションウィンドウを表示
pp.Visible = true

# スライドファイルの新規作成
presen = pp.Presentations.add

# スライドのサイズを取得
p slidewidth  = presen.pageSetup.slideWidth
p slideheight = presen.pageSetup.slideHeight

# 現在の総ページ数を取得
p ipage = presen.Slides.Count

# 新しいページを末尾ページの次に作成
newSlide = presen.Slides.Add(ipage + 1, 11)
slideShape = newSlide.Shapes

# タイトルの変更
slideShape.Title.TextFrame.TextRange.Text = title

# 画像の挿入, 設定
imgpath = getAbsolutePath(imgpath)
bodyShape = slideShape.AddPicture(imgpath, false, true, 10, 10 )
bodyShape.LockAspectRatio = true    # 縦横比を固定
bodyShape.width  = 320    # 画像の幅をリサイズ
bodyShape.left = 200       # スライド左端からの位置を指定
bodyShape.top =  150       # スライド上端からの位置を指定

# テキストボックスの挿入, 設定
left = bodyShape.left
top = bodyShape.top - 1.5 * fontsize   # 図より少し上に設置
width = bodyShape.width
height = fontsize
orientation = 1   # テキストの方向. 1 は横書き, 2 は縦書き(下から上), 3 は縦書き (上から下)
tb = slideShape.addTextBox(orientation, left, top, width, height)   # 空の textbox 作成
tr = tb.textFrame.textRange
tr.text = text                    # テキストボックスにテキストを挿入
tr.font.size = fontsize           # フォントサイズの設定
tr.ParagraphFormat.Alignment = 2  # 1: 左揃え, 2: 中央揃え

# ファイルへ出力. 既にファイルがある場合は出力されない
if output then
  output = getAbsolutePath(output)
  unless File.exist?(output)
    presen.SaveAs(output)
  else
    puts "ERROR: file exists."
  end
end

#pp.Quit   # PowerPoint アプリケーションの終了

更新日時:2013/11/06 20:45:34
キーワード:
参照: