Pythonでpptxファイルに複数のテーブルを追加する目的
今回はPythonでパワーポイントファイル(pptx)に複数のテーブルを追加します。前回のスライドへテーブルを追加する方法をもとにして説明していきますので、そちらも参考にしていただければと思います。ライブラリとして、python-pptx を使用します。
例えばこんな方にお薦め
- 最近Pythonを使い始めて、どんなことができるか試してみたい
- 写真やグラフをパワポで見やすい形で整理しておきたい
- パワポスライドへ自動で複数のテーブルを追加したい
- パワポで定型的で定期的な報告資料を求められてしまった、そして資料作成というルーチン作業が増えてしまった
前準備として、python-pptxライブラリのインストールを済ませておきます。説明には下記のコードを使います。
今回のコード
import pptx from pptx.util import Inches import os cd = os.getcwd() prs = pptx.Presentation() slide = prs.slides.add_slide(prs.slide_layouts[6]) row_num1 = 2 col_num1 = 3 left1 = Inches(1) top1 = Inches(1) width1 = Inches(7) height1 = Inches(1) row_num2 = 4 col_num2 = 6 left2 = Inches(0.5) top2 = Inches(3) width2 = Inches(8) height2 = Inches(3) table1 = slide.shapes.add_table(row_num1, col_num1, left1, top1, width1, height1).table table2 = slide.shapes.add_table(row_num2, col_num2, left2, top2, width2, height2).table prs.save(cd + '/test.pptx')
上記のコードを実行すると、.pyファイルと同じディレクトリに"test.pptx" というパワポファイルができています。
ファイルを開くと次のようなレイアウトのファイルができています。2行3列と4行6列の2つのテーブルが追加されています。
コードの解説
それではコードの解説をしていきます。
import pptx
pptxモジュールをインポートします。パワポを操作するのに使用します。
from pptx.util import Inches
Inchesモジュールをインポートします。パワポ内の長さを扱うのに使用します。
import os
osモジュールをインポートします。現在のディレクトリを取得するのに使用します。
cd = os.getcwd()
cd変数に現在のディレクトリを格納します。
prs = pptx.Presentation()
pptx.Presentation() をprsという変数で表します。以降、毎回pptx.Presentation と記述しなくてもprsと書いて省略することができます。
slide = prs.slides.add_slide(prs.slide_layouts[6])
全行で記述したパワポ prs にスライドを追加します。また、引数でスライドのレイアウトを指定しています。今回は白紙のレイアウト6を選択しています。レイアウトの解説についてはこちら(Pythonでpptxファイルを作成する方法)を参照してください。
row_num1 = 2
テーブル1の行数を指定します。ここでは2行としています。
col_num1 = 3
テーブル1の列数を指定します。ここでは3列としています。
left1 = Inches(1)
テーブル1の左端の位置を指定します。スライドの左からの距離を決めます。ここでは1インチとしています。
top1 = Inches(1)
テーブル1の上端の位置を指定します。スライドの上からの距離を決めます。ここでは1インチとしています。
width1 = Inches(7)
テーブル1全体の幅を指定します。ここでは7インチとしています。1列の幅はこの幅を列数で割った値になります。
height1 = Inches(1)
テーブル1全体の高さを指定します。ここでは1インチとしています。1行の高さはこの高さを行数で割った値になります。
row_num2 = 4
テーブル2の行数を指定します。ここでは4行としています。
col_num2 = 6
テーブル2の列数を指定します。ここでは6列としています。
left2 = Inches(0.5)
テーブル2の左端の位置を指定します。スライドの左からの距離を決めます。ここでは0.5インチとしています。
top2 = Inches(3)
テーブル2の上端の位置を指定します。スライドの上からの距離を決めます。ここでは3インチとしています。
width2 = Inches(8)
テーブル2全体の幅を指定します。ここでは8インチとしています。1列の幅はこの幅を列数で割った値になります。
height2 = Inches(3)
テーブル2全体の高さを指定します。ここでは3インチとしています。1行の高さはこの高さを行数で割った値になります。
table1 = slide.shapes.add_table(row1_num1, col_num1, left1, top1, width1, height1).table
作成したslide にテーブル1を追加します。add_table() の引数に、設定したテーブルの値を入力しています。
table2 = slide.shapes.add_table(row_num2, col_num2, left2, top2, width2, height2).table
作成したslide にテーブル2を追加します。add_table() の引数に、設定したテーブルの値を入力しています。
prs.save(cd + '/test.pptx')
作成したslide にテーブルを追加します。add_table() の引数に、設定したテーブルの値を入力しています。
パラメータのリスト化
ここまで各パラメータを個別の変数(例えば、row_num1 = 2など)で定義してきましたが、リストを使えばもう少しすっきりとしたコードにすることができます。
リストを用いたコード
import pptx from pptx.util import Inches import os cd = os.getcwd() prs = pptx.Presentation() slide = prs.slides.add_slide(prs.slide_layouts[6]) row_num = [2, 4] col_num = [3, 6] left = [Inches(1), Inches(0.5)] top = [Inches(1), Inches(3)] width = [Inches(7), Inches(8)] height = [Inches(1), Inches(3)] table1 = slide.shapes.add_table(row_num[0], col_num[0], left[0], top[0], width[0], height[0]).table table2 = slide.shapes.add_table(row_num[1], col_num[1], left[1], top[1], width[1], height[1]).table prs.save(cd + '/test.pptx')
上記のコードでも、先に説明した名用と同じ結果を得ることができます。変数をリスト化することは、個別にパラメータを変数で定義するのに比べてコードを短くすることができるメリットもありますが、関数や、for文でも扱いやすくなるメリットもあります。このあたりも少しずつ解説していきたいと思います。
まとめ
今回は、Pythonを使ってパワポファイルに複数のテーブルを追加してみました。それぞれのテーブルの中にテキストを追加したりすることもできますので、以前の記事(Pythonでpptxファイルに追加したテーブルにテキストを入力する方法)を参考にしてみていただければと思います。