# ppt_test.rb.txt: ruby script (encoding: Windows-31J) # PowerPointのプレゼンテーションをPDFファイルとして出力 # z_ppt_all.pdf: プレゼンテーションをすべてPDFに出力 # z_ppt_part.pdf: プレゼンテーションの一部(第2スライドのみ)をPDFに出力 require "pptap" src, data_str = DATA.read.split(/\n########+\n+/) # 素材データ取込み data_ary = eval(src) ppt_file = "z_ppt_test.ppt" File.unlink(ppt_file) if test(?e, ppt_file) all_file = "z_ppt_all.pdf" File.unlink(all_file) if test(?e, all_file) part_file = "z_ppt_part.pdf" File.unlink(part_file) if test(?e, part_file) ppt = Pptap.new # PowerPointの起動 ppt.opens(ppt_file) do |presen| # プレゼンテーションを開く slide_width = presen.PageSetup.SlideWidth slide_height = presen.PageSetup.SlideHeight # 第1のスライドを作成 new_slide = presen.add_slide() new_slide.Shapes.Title.TextFrame.TextRange.Text = "H24年人口等" shp = new_slide.Shapes.AddTable('NumRows'=>data_ary.size, 'NumColumns'=>data_ary[0].size) for i in 1..data_ary.size row = data_ary[i-1] for j in 1..row.size shp.Table.Cell(i,j).Shape.TextFrame.TextRange.Text = row[j-1] end end # 第2のスライドを作成 new_slide = presen.add_slide() new_slide.Shapes.Title.TextFrame.TextRange.Text = "アイデア発想法" shp = new_slide.Shapes.AddTextbox('Orientation'=>1, 'Left'=>60, 'Top'=>60, 'Width'=>slide_width-60, 'Height'=>slide_height-60) # ↑ Orientation 1:横書き, 2:縦書き(下から上), 3:縦書き(上から下) shp.textFrame.textRange.text = data_str presen.save # プレゼンテーションを保存 presen.pdf_out(all_file) # すべてをPDF出力 end ppt.opens(ppt_file) do |presen| presen.PrintOptions.Ranges.ClearAll # 印刷範囲をクリア prng = presen.PrintOptions.Ranges.Add(2,2) # 印刷範囲の設定 presen.pdf_out('Path'=>part_file, 'PrintRange'=>prng, 'RangeType'=>PpPrintSlideRange) end ppt.quit # PowerPointの終了 __END__ [["都道府県", "人口", "面積", "人口密度"], ["東京", 13216221, 2188.67, 6038.47], ["神奈川", 9072133, 2415.86, 3755.24], ["大阪", 8863324, 1901.42, 4661.42], ["愛知", 7425952, 5165.14, 1437.71], ["全国", 127532028, 372923.77, 341.98]] ######## オズボーンのチェックリスト ・他に使い道は? ・応用できないか? ・変更したら? ・拡大したら? ・縮小したら? ・他のもので代用したら? ・他と入れ替えたら? ・逆にしたら? ・組み合わせたら?