PythonでPowerpoint(パワーポイント)を自動化【テキストの装飾】

PowerPoint(パワポ)ドキュメント作成をPythonで自動化する方法について紹介します。

前回の記事では、PythonでPowerpoint(パワポ)を操作するためのモジュール「Python-pptx」の基礎的な使い方を説明しました。

今回は、もう少し踏み込んで、Python-pptxでテキストの装飾や、テキスト位置の調整を行う方法を説明したいと思います。

せっかくPython-pptxを使ってPowerPointの作成を自動化しても、体裁が整っていないと少し残念です。せっかくなら、見た目もキレイな資料を作れるようになりましょう!

スポンサーリンク

PythonでPowerpointを自動化:モジュールのインポート

今回必要なモジュールをインポートします。

テキストの色を変えるために、RGBColorをインポートしています。MSO_ANCHORとPP_ALIGNはテキストの配置を調整する時に使います。

#モジュールのインポート
from pptx import Presentation
from pptx.util import Cm, Inches, Pt
#フォントの色を変えるためにRGBcolorを使う
from pptx.dml.color import RGBColor
#テキストの配置を調整する時にMSO_ANCHORとPP_ALIGNを使う
from pptx.enum.text import MSO_ANCHOR, PP_ALIGN
スポンサーリンク

PythonでPowerpointを自動化:テキスト色やスタイルを変更する

タイトルページの作成とテキストの色を変更

まず、タイトルページを作成し、タイトルの文字の色を変えてみましょう。

PowerPointドキュメントの作成方法やテキストの挿入方法の詳細は、前回の記事を参考にしてください。

#プレゼンテーションオブジェクトの作成
ppt = Presentation()

#追加するスライドを選択
slide_layout_0 = ppt.slide_layouts[0]

#スライドを追加
slide_0 = ppt.slides.add_slide(slide_layout_0)
slide_0_title = slide_0.placeholders[0]
#テキストフレームオブジェクトを取得
text_frame = slide_0_title.text_frame

#パラグラフの追加
pg = text_frame.paragraphs[0]

#テキスト挿入
pg.text = "Python"

#フォントカラーの変更
pg.font.color.rgb = RGBColor(255, 0, 0)

フォントの色を変えるには、_Paragraphオブジェクトのfontプロパティから行います。テキストのスタイルに関する変更はほとんど、fontから行うので、覚えておいてください。

上のコードを実行すると、以下のようにフォントの”Python“という文字が赤色になっているはずです。

テキストの一部の色を変更する

今度は、テキスト全体でなく、テキストの一部の色を変更してみます。今回は”Anaconda and Mniconda“のように、テキストの一部を赤色と青色に変更します。

テキストの一部の色を変えるには、_Runオブジェクト経由で行います。このように、同じパラグラフ内で文字の色を変えたりしたいときは、_Runオブジェクトを使います。

少し面倒ですが、普段から_Runオブジェクトを使い、慣れておくと良いかもしれません。

ppt.save()の前に、以下のコードを追加してください。

下のコードを実行してみて下さい。下の図のように、テキストの一部が赤色と青色になります!

(省略)
#白紙のスライドを追加
slide_layout_6 = ppt.slide_layouts[6]
slide_6  = ppt.slides.add_slide(slide_layout_6)
shapes = slide_6.shapes
shape = shapes.add_textbox(Cm(1), Cm(1), Cm(5), Cm(5))
text_frame = shape.text_frame

#テキストの一部の色を赤色に変える
pg = text_frame.paragraphs[0]
run = pg.add_run()
run.text = "Anaconda"
run.font.color.rgb = RGBColor(255, 0, 0)

#テキストの一部を青色に変える
run = pg.add_run()
run.text = " and Miniconda"
run.font.color.rgb = RGBColor(0, 0, 255)
(省略)

テキストのスタイルを変更する

フォントの種類と文字サイズの変更、テキストスタイルを変更します。

ppt.save()の前に、以下のコードを追加してください。コードの中で、フォントサイズの変更、フォントの変更、テキストのスタイルを太字、イタリック、下線にしています。

フォントや文字サイズ等のテキストのスタイルの変更は、_Paragraphオブジェクトのfontプロパティから行います。

(省略)
#白紙のスライドを追加
slide_layout_6 = ppt.slide_layouts[6]
slide_6  = ppt.slides.add_slide(slide_layout_6)

# テキストボックスを追加
shapes = slide_6.shapes
shape = shapes.add_textbox(Cm(1), Cm(1), Cm(5), Cm(5))

#shapeオブジェクトでtextを挿入
shape.text ="Python"
text_frame = shape.text_frame
#パラグラフの追加
pg = text_frame.add_paragraph()
#フォントサイズを大きくする
pg.font.size = Pt(24)
pg.text = "font.size = 24 pt"

#以下、フォントをMeiryo UIにしてboldにする
pg = text_frame.add_paragraph()
pg.font.bold = True
pg.font.name = "font.name = Meiryo UI"
pg.text = "font.name = Meiryo UI"

#以下、フォントをイタリックにするにする
pg = text_frame.add_paragraph()
pg.font.italic = True
pg.text = "font.italic = True"

#以下、アンダーラインを引く
pg = text_frame.add_paragraph()
pg.font.underline = True
pg.text = "font.underline = True"
(省略)
スポンサーリンク

PythonでPowerpointを自動化:テキスト位置の調整

テキストを字下げする

文字の字下げをしてみましょう。すなわち、インデントですね。箇条書きとかで使うやつです。

字下げは、_Paragraphオブジェクトのlevelプロパティに数字をセットするだけです。

下のコードを貼り付けて、実行してみてください。level = 0では字下げされず、level = 1では字下げされ、level = 2では更に字下げされます。

(省略)
slide_layout_6 = ppt.slide_layouts[6]
slide_6  = ppt.slides.add_slide(slide_layout_6)
shapes = slide_6.shapes

shape = shapes.add_textbox(Cm(1), Cm(1), Cm(5), Cm(5))
text_frame = shape.text_frame
text_frame.clear()
pg =text_frame.paragraphs[0]
pg.text ="level = 0"

pg =text_frame.add_paragraph()
pg.text ="level = 1"
pg.level = 1

pg =text_frame.add_paragraph()
pg.text ="level = 2"
pg.level = 2
(省略)

テキストの水平方向の配置を変更する

テキストの水平方向の配置を変更しましょう。テキストを「左揃え」、「中央揃え」、「右揃え」にします。

テキストの水平方向の配置を変更するには、PP_ALIGNをインポートする必要があります。本記事の最初のソースコード部分で、PP_ALIGNをインポートしています。

そして、_Paragraphオブジェクトのalignmentプロパティに値をセットします。セットする値は「左揃え」ならPP_ALIGN.LEFT、「右揃え」ならPP_ALIGN.RIGHT、「中央揃え」ならばPP_ALIGN.CENTERです。

下のコードを実行すると、下図のようにテキストが左揃え、中央揃え、右揃えになっていることが確認できます。

(省略)
slide_layout_6 = ppt.slide_layouts[6]
slide_6  = ppt.slides.add_slide(slide_layout_6)
shapes = slide_6.shapes

#中央揃え
shape = shapes.add_textbox(Cm(0), Cm(1), Cm(6.14), Cm(1))
text_frame = shape.text_frame
text_frame.clear()
pg =text_frame.paragraphs[0]
pg.text ="alignment = center"
pg.alignment = PP_ALIGN.CENTER

#左揃え
shape = shapes.add_textbox(Cm(7.5), Cm(1), Cm(6.14), Cm(1))
text_frame = shape.text_frame
text_frame.clear()
pg =text_frame.paragraphs[0]
pg.text ="alignment = left "
pg.alignment = PP_ALIGN.LEFT

#右揃え
shape = shapes.add_textbox(Cm(15), Cm(1), Cm(6.14), Cm(1))
text_frame = shape.text_frame
text_frame.clear()
pg =text_frame.paragraphs[0]
pg.text ="alignment = right"
pg.alignment = PP_ALIGN.RIGHT

(省略)

ちなみに、上記以外にも、テキストの「均等割り付け」や、「両端揃え」を行うこともできます。詳しくは、python-pptxのドキュメントに記載されています。

テキストの垂直方向の配置を変更する

テキストの垂直方向の配置を変更しましょう。テキストを配置を「上」、「上下中央」「下」にします。

テキストの水平方向の配置を変更するには、MSO_ANCHORをインポートする必要があります。本記事の最初のソースコード部分で、MSO_ANCHORをインポートしています。

そして、TextFrameオブジェクトのvertical_anchorプロパティに値をセットします。セットする値は「上」ならMSO_ANCHOR.TOP、「上下中央」ならMSO_ANCHOR.MIDDLE、「下」ならばMSO_ANCHOR.BOTTOMです。

下のコードを実行すると、下図のようにテキストが左揃え、中央揃え、右揃えになっていることが確認できます。

(省略)
#新しい白紙のスライドを追加
slide_layout_6 = ppt.slide_layouts[6]
slide_6  = ppt.slides.add_slide(slide_layout_6)
shapes = slide_6.shapes

# テキストボックスを追加
shape = shapes.add_textbox(Cm(0), Cm(1), Cm(6.3), Cm(3))
text_frame = shape.text_frame
text_frame.clear()

# 文字の配置 = 上
pg =text_frame.paragraphs[0]
pg.text ="vertical_anchor = top"
pg =text_frame.add_paragraph()
pg.text ="vertical_anchor = top"
text_frame.vertical_anchor = MSO_ANCHOR.TOP

# 文字の配置 = 上下中央
shape = shapes.add_textbox(Cm(7.5), Cm(1), Cm(6.3), Cm(3))
text_frame = shape.text_frame
text_frame.clear()
text_frame.vertical_anchor = MSO_ANCHOR.MIDDLE
pg =text_frame.paragraphs[0]
pg.text ="vertical_anchor = middle"
pg =text_frame.add_paragraph()
pg.text ="vertical_anchor = middle"

# 文字の配置 = 下
shape = shapes.add_textbox(Cm(15), Cm(1), Cm(6.3), Cm(3))
text_frame = shape.text_frame
text_frame.clear()
text_frame.vertical_anchor = MSO_ANCHOR.BOTTOM
pg =text_frame.paragraphs[0]
pg.text ="vertical_anchor = bottom"
pg =text_frame.add_paragraph()
pg.text ="vertical_anchor = bottom"
(省略)

テキストボックスにマージンを設定

テキストボックスにマージン(余白)を設定します。

マージンを設定するには、TextFrameオブジェクトのmargin_topmargin_bottommargin_leftmargin_rightプロパティに値をセットします。

以前の記事にも書い通り、Python-pptxでは、デフォルトでは、emu(English Metric Units)という単位が用いられているので、Cmpt, inchesをインポートし馴染みの単位を使い、marginの値にセットすると良いでしょう。

以下のコードを貼り付けて実行して見ると、下の図のように右側と上側に1 cm、左側と下側のマージンは0となります。

(省略)
#新しい白紙のスライドを追加
slide_layout_6 = ppt.slide_layouts[6]
slide_6  = ppt.slides.add_slide(slide_layout_6)
shapes = slide_6.shapes

#テキストボックスを追加
shape = shapes.add_textbox(Cm(1), Cm(1), Cm(3.8), Cm(2.55))
text_frame = shape.text_frame
text_frame.clear()

#テキストを挿入
pg =text_frame.paragraphs[0]
pg.text ="margin = 1"
pg =text_frame.add_paragraph()
pg.text ="margin = 1"

#マージンを設定
text_frame.margin_right = Cm(1)
text_frame.margin_left = Cm(0)
text_frame.margin_bottom = Cm(0)
text_frame.margin_top = Cm(1)

(省略)
タイトルとURLをコピーしました