<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>python-pptx｜python-manブログ</title>
	<atom:link href="https://python-man.club/category/python/python-pptx/feed/" rel="self" type="application/rss+xml" />
	<link>https://python-man.club</link>
	<description>独学者でもpythonでアプリを作れる！</description>
	<lastBuildDate>Fri, 03 Jun 2022 22:52:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.2</generator>
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>pythonでパワポ操作〜テキスト編集について〜【サンプルコードあり】</title>
		<link>https://python-man.club/python_python_pptx_text/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python_python_pptx_text</link>
					<comments>https://python-man.club/python_python_pptx_text/#respond</comments>
		
		<dc:creator><![CDATA[syou0445]]></dc:creator>
		<pubDate>Thu, 05 May 2022 02:13:54 +0000</pubDate>
				<category><![CDATA[python]]></category>
		<category><![CDATA[python-pptx]]></category>
		<category><![CDATA[python パワポ テキスト]]></category>
		<guid isPermaLink="false">https://python-man.club/?p=1138</guid>

					<description><![CDATA[今回の記事では、pythonでパワポを操作して、テキスト編集を行う方法について解説をしていきたいと思います 前回の記事では、スライドを作成する方法やプレースホルダーについて解説をしました 初めてpythonでパワポ操作を]]></description>
										<content:encoded><![CDATA[<p>今回の記事では、<strong><span class="marker">pythonでパワポを操作して、テキスト編集を行う方法について解説</span></strong>をしていきたいと思います</p>
<p>前回の記事では、スライドを作成する方法やプレースホルダーについて解説をしました</p>
<p>初めてpythonでパワポ操作をする場合には、前回の記事からスタートすると理解が深まります</p>
<a href="https://python-man.club/python_python_pptx/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://python-man.club/wp-content/uploads/2022/05/今年のうちに読むべき書籍-2-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="python python-pptx" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">pythonでパワポ操作〜python-pptxの導入からスライド作成〜【サンプルコードあり】</span><span class="blog-card-excerpt">pythonの得意なことといえば、事務作業の自動化が挙げられます。しかし、python×パワポという書籍はまだありません・そこで、今回はpythonでパワポを操作する方法について解説していきたいと思います・
パワポやエクセルなどは、会社員であれば、必ず使用するソフトです。これらを自動化することができれば、作業時間をかなり短縮することができます。...</span></div></div></a>
<div class="simple-box4">
<p style="text-align: center;"><span style="color: #ff0000;"><strong>この記事で学べること</strong></span><br />
<strong>pythonでパワポを操作する方法がわかる</strong><br />
<strong>pythonでパワポのテキストを編集することができる</strong><br />
<strong>pythonから文字色や複数行の文字列を設定することができる</strong></p>
</div>
<h2>pythonでパワポ操作〜テキスト編集について〜</h2>
<img fetchpriority="high" decoding="async" class="alignnone size-large wp-image-1155" src="https://python-man.club/wp-content/uploads/2022/05/student-g105dc558f_1920-1024x683.jpg" alt="テキスト編集" width="1024" height="683" srcset="https://python-man.club/wp-content/uploads/2022/05/student-g105dc558f_1920-1024x683.jpg 1024w, https://python-man.club/wp-content/uploads/2022/05/student-g105dc558f_1920-300x200.jpg 300w, https://python-man.club/wp-content/uploads/2022/05/student-g105dc558f_1920-768x512.jpg 768w, https://python-man.club/wp-content/uploads/2022/05/student-g105dc558f_1920-1536x1024.jpg 1536w, https://python-man.club/wp-content/uploads/2022/05/student-g105dc558f_1920.jpg 1920w, https://python-man.club/wp-content/uploads/2022/05/student-g105dc558f_1920-1024x683.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" />
<p>pythonからパワポのテキストを編集するには、「<strong><span class="marker">TextFrame</span></strong>」を使用していきます</p>
<h3>TextFrameとは</h3>
<p><strong><span class="marker">TextFrameオブジェクトとは、テキストのフレームワークを指しています</span></strong></p>
<p>パワーポイントには、図形やテキストボックスなどテキストを編集することができる領域が設定されています</p>
<p>この、テキストを編集することができる領域のことを「TextFrame」と呼びます</p>
<p>パワポを操作している場合には、TextFrameを意識することはありませんが、pythonでパワポを操作する場合には、TextFrameで指定して、テキストを編集していきます</p>
<img decoding="async" class="alignnone size-full wp-image-1160" src="https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-04-16.00.03.png" alt="TextFrame" width="731" height="547" />
<p>TextFrameを指定することによって、インデントやフォント、文字色などを設定することが可能になります</p>
<p>しかし、これらを設定するには「<strong>TextFrame</strong>」以外にも必要なものがあり、</p>
<ul>
<li><strong>Paragraphオブジェクト</strong></li>
<li><strong>Runオブジェクト</strong></li>
</ul>
<p>の知識が必要になります</p>
<table style="border-collapse: collapse; width: 100%;" border="1">
<tbody>
<tr>
<td style="width: 19.347826086956523%;"></td>
<td style="width: 30.652173913043477%;">TextFrameオブジェクト</td>
<td style="width: 28.768115942028984%;">Paragraphオブジェクト</td>
<td style="width: 21.231884057971016%;">Runオブジェクト</td>
</tr>
<tr>
<td style="width: 19.347826086956523%;">テキスト設定</td>
<td style="width: 30.652173913043477%;">可能</td>
<td style="width: 28.768115942028984%;">不可</td>
<td style="width: 21.231884057971016%;">不可</td>
</tr>
<tr>
<td style="width: 19.347826086956523%;">複数行設定</td>
<td style="width: 30.652173913043477%;">可能</td>
<td style="width: 28.768115942028984%;">可能</td>
<td style="width: 21.231884057971016%;">不可</td>
</tr>
<tr>
<td style="width: 19.347826086956523%;">文字の詳細設定</td>
<td style="width: 30.652173913043477%;">可能</td>
<td style="width: 28.768115942028984%;">可能</td>
<td style="width: 21.231884057971016%;">可能</td>
</tr>
</tbody>
</table>
<h3>TextFrameの使い方</h3>
<p>では実際にTextFrameを使って、テキストを編集していきたいと思います</p>
<p>TextFrameでテキストを編集する場合には、既存のPowerPointファイルを読み込んで行なっていきます</p>
<p>手順としては、以下のようになります</p>
<ol>
<li><strong>既存ファイルの読み込み</strong></li>
<li><strong>スライド内にある要素・種類を抽出</strong></li>
<li><strong>TextFrameが含まれているかを確認</strong></li>
<li><strong>TextFrameの取得</strong></li>
<li><strong>テキストの編集</strong></li>
</ol>
<pre class="language-python"><code>from pptx import Presentation
from pptx.enum.text import MSO_AUTO_SIZE 
prs=Presentation('.pptx')

#1ページ目（「タイトル スライド」のレイアウトを指定）
slide_layout_0 = prs.slide_layouts[0]
slide_1 = prs.slides.add_slide(slide_layout_0)
old_sld0_layout0=prs.slides[0]　#既存スライドを読み込む

for shape in old_sld0_layout0.shapes:　#読み込んだ既存スライドから図形(shapeオブジェクト)を探す
    print(shape.name)　　　　　　　　　　 #探した図形の番号を返す(ex.Title 1 Subtitle 2)
    if not shape.has_text_frame:     　#shapeオブジェクトにTextFrameが含まれているかを確認
        continue
    
    textFrame = shape.text_frame　　　　#図形(shapeオブジェクト)からTextFrameを取得
    textFrame.text='textFrameのサンプル'#TextFrameにテキストを入力
    textFrame.autosize = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE　#TextFrameのフォントサイズを自動調整
    textFrame.word_wrap = True　　　　　　　　　　　　　　　　 #TextFrame内テキストの折り返しを有効に
    

#PowerPointを保存
prs.save("powerpnt.pptx")</code></pre>
<img decoding="async" class="alignnone size-full wp-image-1143" src="https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-04-10.27.20.png" alt="textFrameサンプル" width="713" height="535" />
<p><strong>TextFrameオブジェクトにはいくつかのプロパティがあります</strong></p>
<table style="border-collapse: collapse; width: 0%; height: 216px;" border="1">
<tbody>
<tr style="height: 24px;">
<td style="width: 23.620495495495497%; height: 24px;"><span style="font-size: 12px;"><strong>プロパティ</strong></span></td>
<td style="width: 26.576576576576585%; height: 24px;"><span style="font-size: 12px;"><strong>機能</strong></span></td>
<td style="width: 109.65163406581507%; height: 24px;"><span style="font-size: 12px;"><strong>設定</strong></span></td>
</tr>
<tr style="height: 48px;">
<td style="width: 23.620495495495497%; height: 48px;"><span style="font-size: 12px;"><strong>textプロパティ</strong></span></td>
<td style="width: 26.576576576576585%; height: 48px;"><span style="font-size: 12px;"><strong>テキストフレームに文字を入力・取得</strong></span></td>
<td style="width: 109.65163406581507%; height: 48px;"></td>
</tr>
<tr style="height: 24px;">
<td style="width: 23.620495495495497%; height: 24px;"><span style="font-size: 12px;"><strong>word_wrapプロパティ</strong></span></td>
<td style="width: 26.576576576576585%; height: 24px;"><span style="font-size: 12px;"><strong>文字列の折り返し</strong></span></td>
<td style="width: 109.65163406581507%; height: 24px;"><span style="font-size: 12px;"><strong>Trueで有効.<br />
デフォルトはFalse</strong></span></td>
</tr>
<tr style="height: 24px;">
<td style="width: 23.620495495495497%; height: 24px;"><span style="font-size: 12px;"><strong>margin_top(bottom)プロパティ</strong></span></td>
<td style="width: 26.576576576576585%; height: 24px;"><span style="font-size: 12px;"><strong>上下の余白を調整</strong></span></td>
<td style="width: 109.65163406581507%; height: 24px;"></td>
</tr>
<tr style="height: 24px;">
<td style="width: 23.620495495495497%; height: 24px;"><span style="font-size: 12px;"><strong>margin_left(right)プロパティ</strong></span></td>
<td style="width: 26.576576576576585%; height: 24px;"><span style="font-size: 12px;"><strong>左右の余白を調整</strong></span></td>
<td style="width: 109.65163406581507%; height: 24px;"></td>
</tr>
<tr style="height: 24px;">
<td style="width: 23.620495495495497%; height: 24px;"><span style="font-size: 12px;"><strong>autosizeプロパティ</strong></span></td>
<td style="width: 26.576576576576585%; height: 24px;"><span style="font-size: 12px;"><strong>文字のサイズを自動調整.<br />
MSO_AUTO_SIZEを使用</strong></span></td>
<td style="width: 109.65163406581507%; height: 24px;">
<p style="text-align: center;"><span style="font-size: 12px;"><strong><span class="marker">MSO_AUTO_SIZE</span></strong></span></p>
<p><span style="font-size: 12px;"><strong>NONE…自動調整しない.<br />
</strong><strong>SHAPE_TO_FIT_TEXT…フレームサイズをテキストに合わせる<br />
</strong><strong>TEXT_TO_FIT_SHAPE…テキストをフレームサイズに合わせる</strong></span></td>
</tr>
<tr style="height: 24px;">
<td style="width: 23.620495495495497%; height: 24px;"><span style="font-size: 12px;"><strong>vertical_anchorプロパティ</strong></span></td>
<td style="width: 26.576576576576585%; height: 24px;"><span style="font-size: 12px;"><strong>文字の上下位置.<br />
MSO_VERTICAL_ANCHORを使用</strong></span></td>
<td style="width: 109.65163406581507%; height: 24px;">
<p style="text-align: center;"><span style="font-size: 12px;"><strong><span class="marker">MSO_VERTICAL_ANCHOR</span></strong></span></p>
<p><span style="font-size: 12px;"><strong>TOP…上揃え</strong></span><br />
<span style="font-size: 12px;"><strong>MIDDLE…中央揃え</strong></span><br />
<span style="font-size: 12px;"><strong>BOTTOM…下揃え</strong></span></td>
</tr>
</tbody>
</table>
<img decoding="async" class="alignnone size-full wp-image-1146" src="https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-04-12.21.21.png" alt="余白の調整" width="716" height="320" />
<h2>pythonでパワポ操作〜段落の編集について〜</h2>
<img decoding="async" class="alignnone size-large wp-image-1156" src="https://python-man.club/wp-content/uploads/2022/05/laptop-g82c60a512_1920-1024x640.jpg" alt="段落編集" width="1024" height="640" srcset="https://python-man.club/wp-content/uploads/2022/05/laptop-g82c60a512_1920-1024x640.jpg 1024w, https://python-man.club/wp-content/uploads/2022/05/laptop-g82c60a512_1920-300x188.jpg 300w, https://python-man.club/wp-content/uploads/2022/05/laptop-g82c60a512_1920-768x480.jpg 768w, https://python-man.club/wp-content/uploads/2022/05/laptop-g82c60a512_1920-1536x960.jpg 1536w, https://python-man.club/wp-content/uploads/2022/05/laptop-g82c60a512_1920.jpg 1920w, https://python-man.club/wp-content/uploads/2022/05/laptop-g82c60a512_1920-1024x640.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" />
<p>テキスト入力は1行で済む場合もあれば、複数行になることもあります</p>
<p>複数行になった場合に、段落の編集をするのが、「<strong><span class="marker">Paragraphオブジェクト</span></strong>」になります</p>
<h3>Paragraphオブジェクトについて</h3>
<p><strong><span class="marker">Paragraphオブジェクトとは、TextFrame内の段落を調整するものになります</span></strong></p>
<p>TextFrame内の文字が1行であれば問題ありませんが、複数行になったときには、Paragraphオブジェクトの設定が必要になります</p>
<pre class="language-python"><code>from pptx import Presentation
from pptx.enum.text import MSO_AUTO_SIZE 
#既存スライドの読み込み
prs=Presentation('.pptx')

#既存スライドの1枚目を読み込み
old_sld0_layout0=prs.slides[0]

#スライド上のShapeオブジェクト(テキストボックス)の属性情報の抽出
#has_text_frame属性が「True」でTextFrameオブジェクトの包含が可能
for shape in old_sld0_layout0.shapes:
    print(shape.shape_type, shape.name, shape.has_text_frame)

#TextFrameオブジェクトに段落(Paragraphオブジェクト)を2つ追加する
#rangeの数値を変えると段落の数が変化
for text in range(2):
    old_sld0_layout0.shapes[0].text_frame.add_paragraph()
    old_sld0_layout0.shapes<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank01.png" />.text_frame.add_paragraph()

#PowerPointを保存
prs.save("powerpnt.pptx")</code></pre>
<img decoding="async" class="alignnone size-full wp-image-1147" src="https://python-man.club/wp-content/uploads/2022/05/paragraph.jpg" alt="paragraph" width="720" height="540" /><img decoding="async" class="alignnone size-full wp-image-1148" src="https://python-man.club/wp-content/uploads/2022/05/paragraph1.jpg" alt="paragraph1" width="720" height="540" /> <img decoding="async" class="alignnone size-full wp-image-1149" src="https://python-man.club/wp-content/uploads/2022/05/paragraph2.jpg" alt="paragraph2" width="720" height="540" />
<p><strong><span class="marker">段落の調整ができたので、次は字下げとフォントの位置調整です</span></strong></p>
<pre class="language-python"><code>from pptx import Presentation
from pptx.enum.text import MSO_AUTO_SIZE 
from pptx.enum.text import PP_ALIGN
prs=Presentation('.pptx')

old_sld0_layout0=prs.slides[0]

for shape in old_sld0_layout0.shapes:
    print(shape.shape_type, shape.name, shape.has_text_frame)

paras =old_sld0_layout0.shapes[0].text_frame.paragraphs

for i, para in enumerate(paras,0):
    para.text="字下げ"
    para.level=i

paras = old_sld0_layout0.shapes<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank01.png" />.text_frame.paragraphs

for i, para in enumerate(paras, 0):
    para.text = "段落ごとの水平位置(左/中央/右揃え)を指定する"
#PP_ALIGN.LEFT, PP_ALIGN.CENTER, PP_ALIGN.RIGHTで選ぶ
    para.alignment = PP_ALIGN.CENTER

#PowerPointを保存
prs.save("powerpnt.pptx")</code></pre>
<p><strong><span class="marker">最後にフォントの調整と段落間の調整です</span></strong></p>
<pre class="language-python"><code>from pptx import Presentation
from pptx.enum.text import MSO_AUTO_SIZE 
from pptx.enum.text import PP_ALIGN
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.util import Pt 


prs=Presentation('.pptx')

old_sld0_layout0=prs.slides[0]

for shape in old_sld0_layout0.shapes:
    print(shape.shape_type, shape.name, shape.has_text_frame)

paras =old_sld0_layout0.shapes[0].text_frame.paragraphs

for i, para in enumerate(paras, 0):
    para.text = "文字列のフォントを調整"
　　#MSO_THEME_COLOR.ACCENT_1, MSO_THEME_COLOR.ACCENT_2, MSO_THEME_COLOR.ACCENT_6から選択
    para.font.color.theme_color = MSO_THEME_COLOR.ACCENT_1  # フォントの色
    para.font.bold = True  # フォントの大きさ
    
for para in paras:
    para.text = "15ptで調整"
    para.space_after = Pt(15)
#PowerPointを保存
prs.save("powerpnt.pptx")</code></pre>
<h3>Paragraphオブジェクトのプロパティ</h3>
<p>TextFrameと同じように、Paragraphオブジェクトにもプロパティがあります</p>
<table style="border-collapse: collapse; width: 100%;" border="1">
<tbody>
<tr>
<td style="width: 38.69565217391304%; text-align: center;"><span style="font-size: 12px;"><strong>プロパティ</strong></span></td>
<td style="width: 27.971014492753618%; text-align: center;"><span style="font-size: 12px;"><strong>機能</strong></span></td>
<td style="width: 33.33333333333333%; text-align: center;"><span style="font-size: 12px;"><strong>設定</strong></span></td>
</tr>
<tr>
<td style="width: 38.69565217391304%;"><span style="font-size: 12px;"><strong>textプロパティ</strong></span></td>
<td style="width: 27.971014492753618%;"><span style="font-size: 12px;"><strong>段落に文字列を追加</strong></span></td>
<td style="width: 33.33333333333333%;"></td>
</tr>
<tr>
<td style="width: 38.69565217391304%;"><span style="font-size: 12px;"><strong>levelプロパティ</strong></span></td>
<td style="width: 27.971014492753618%;"><span style="font-size: 12px;"><strong>段落の字下げ</strong></span></td>
<td style="width: 33.33333333333333%;"><span style="font-size: 12px;"><strong>0〜8で調整</strong></span></td>
</tr>
<tr>
<td style="width: 38.69565217391304%;"><span style="font-size: 12px;"><strong>fontプロパティ</strong></span></td>
<td style="width: 27.971014492753618%;"><span style="font-size: 12px;"><strong>フォント設定</strong></span></td>
<td style="width: 33.33333333333333%;"><span style="font-size: 12px;"><strong><a href="https://python-pptx.readthedocs.io/en/latest/api/text.html#font-objects">Fontオブジェクト</a>を使用</strong></span></td>
</tr>
<tr>
<td style="width: 38.69565217391304%;"><span style="font-size: 12px;"><strong>alignmentプロパティ</strong></span></td>
<td style="width: 27.971014492753618%;"><span style="font-size: 12px;"><strong>文字列の水平位置</strong></span></td>
<td style="width: 33.33333333333333%;"><span style="font-size: 12px;"><strong><a href="https://python-pptx.readthedocs.io/en/latest/api/enum/PpParagraphAlignment.html#pp-paragraph-alignment">PP_ALIGN</a>を使用</strong></span></td>
</tr>
<tr>
<td style="width: 38.69565217391304%;"><span style="font-size: 12px;"><strong>line_spacingプロパティ</strong></span></td>
<td style="width: 27.971014492753618%;"><span style="font-size: 12px;"><strong>行間の高さを指定</strong></span></td>
<td style="width: 33.33333333333333%;"><span style="font-size: 12px;"><strong>ptで指定</strong></span></td>
</tr>
<tr>
<td style="width: 38.69565217391304%;"><span style="font-size: 12px;"><strong>space_after(before)プロパティ</strong></span></td>
<td style="width: 27.971014492753618%;"><span style="font-size: 12px;"><strong>前後の段落の調整</strong></span></td>
<td style="width: 33.33333333333333%;"><span style="font-size: 12px;"><strong>ptで指定</strong></span></td>
</tr>
</tbody>
</table>
<h3>enumerate関数について</h3>
<p>コードの途中で出てきた「enumerate」ですが、このenumerate関数を使うことで、要素のインデックスと要素を同時に取り出すことができます</p>
<p>似ている関数に、「range関数」もありますが、range関数ではインデックスを取り出すだけになります</p>
<pre class="language-python"><code>pythonman = ['未経験独学', '収益化ばっちり', 'twitter自動化']
for i, j in enumerate(pythonman):
  print('{0}:{1}'.format(i, j))

&gt;&gt;&gt;出力結果
0:未経験独学
1:収益化ばっちり
2:twitter自動化</code></pre>
<p>まず<strong>1行目でpythonmanにリストを代入</strong>しています</p>
<p>2行目の<strong>for文で変数iとjにpythonmanを代入</strong>し続けます</p>
<p>このとき、<strong><span class="marker">変数iにはlistの添字が代入されるので、0〜2の数字が代入される</span></strong>ことになります</p>
<p>そのため、<span style="color: #ff0000;"><strong>変数iには数字、変数jには文字列</strong></span>、という状況になっています</p>
<p>それをprintで出力すると、上記のような出力結果になります</p>
<h2>pythonでパワポ操作〜文字単位での編集について〜</h2>
<img decoding="async" class="alignnone size-large wp-image-1157" src="https://python-man.club/wp-content/uploads/2022/05/teemu-paananen-bzdhc5b3Bxs-unsplash-1024x732.jpg" alt="文字単位での編集" width="1024" height="732" srcset="https://python-man.club/wp-content/uploads/2022/05/teemu-paananen-bzdhc5b3Bxs-unsplash-1024x732.jpg 1024w, https://python-man.club/wp-content/uploads/2022/05/teemu-paananen-bzdhc5b3Bxs-unsplash-300x214.jpg 300w, https://python-man.club/wp-content/uploads/2022/05/teemu-paananen-bzdhc5b3Bxs-unsplash-768x549.jpg 768w, https://python-man.club/wp-content/uploads/2022/05/teemu-paananen-bzdhc5b3Bxs-unsplash-1536x1098.jpg 1536w, https://python-man.club/wp-content/uploads/2022/05/teemu-paananen-bzdhc5b3Bxs-unsplash.jpg 1920w, https://python-man.club/wp-content/uploads/2022/05/teemu-paananen-bzdhc5b3Bxs-unsplash-1024x732.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" />
<p>文字単位での編集を行うには、「<strong><span class="marker">Runオブジェクト</span></strong>」を使用します</p>
<h3>Runオブジェクトとは</h3>
<p><strong><span class="marker">Runオブジェクトは、文字列の最小単位を調整するオブジェクトになります</span></strong></p>
<p>文字列の最小単位は1文字ずつになり、単語になります</p>
<p>1文字ずつ色を変更することは少ないですが、単語レベルで文字色を変えることはありますので、覚えておいて損はありません</p>
<pre class="language-python"><code>from pptx import Presentation
from pptx.dml.color import RGBColor

prs = Presentation()

#"タイトルとコンテンツ"のレイアウトオブジェクトを取得
title_slide_layout = prs.slide_layouts<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank01.png" />      	
#新しいスライドを追加(タイトルとコンテンツ)
old_sld0_layout0 = prs.slides.add_slide(title_slide_layout) 

#スライド中の要素を抽出、種類を表示
for s in old_sld0_layout0.shapes:
    print(s.name)

    
old_sld0_layout0.shapes[0].text = '文字色を変更'
pg = old_sld0_layout0.shapes[0].text_frame.paragraphs[0]
# 段落(paragraphオブジェクト)を操作するために、runオブジェクトを取得する
rn = pg.runs[0]

# runオブジェクトのfont.color.rgbプロパティに文字色を指定
rn.font.color.rgb = RGBColor(50, 185, 20)

tf = old_sld0_layout0.shapes[0].text_frame
tf.add_paragraph()
pg = old_sld0_layout0.shapes[0].text_frame.paragraphs<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank01.png" />

rn0 = pg.add_run()
rn0.text = 'AAA'
rn0.font.color.rgb = RGBColor(255, 0, 0)

rn1 = pg.add_run()
rn1.text = 'BBB'
rn1.font.color.rgb = RGBColor(0, 255, 0)

rn2 = pg.add_run()
rn2.text = 'CCC'
rn2.font.color.rgb = RGBColor(0, 0, 255)

prs.save('テキストカラー変更.pptx') </code></pre>
<img decoding="async" class="alignnone size-full wp-image-1154" src="https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-04-15.13.59.png" alt="テキストカラーの変更" width="832" height="585" />
<h3>Runオブジェクトのプロパティ</h3>
<p>Runオブジェクトのプロパティは以下のようになります</p>
<table style="border-collapse: collapse; width: 100%;" border="1">
<tbody>
<tr>
<td style="width: 35.21739130434783%; text-align: center;"><span style="font-size: 12px;"><strong>プロパティ</strong></span></td>
<td style="width: 31.449275362318843%; text-align: center;"><span style="font-size: 12px;"><strong>機能</strong></span></td>
<td style="width: 33.333333333333336%; text-align: center;"><span style="font-size: 12px;"><strong>設定</strong></span></td>
</tr>
<tr>
<td style="width: 35.21739130434783%;"><span style="font-size: 12px;"><strong>textプロパティ</strong></span></td>
<td style="width: 31.449275362318843%;"><span style="font-size: 12px;"><strong>文字列の追加</strong></span></td>
<td style="width: 33.333333333333336%;"></td>
</tr>
<tr>
<td style="width: 35.21739130434783%;"><span style="font-size: 12px;"><strong>fontプロパティ</strong></span></td>
<td style="width: 31.449275362318843%;"><span style="font-size: 12px;"><strong>フォント設定</strong></span></td>
<td style="width: 33.333333333333336%;"><span style="font-size: 12px;"><strong><a href="https://python-pptx.readthedocs.io/en/latest/api/text.html#font-objects">Fontオブジェクト</a>を使用</strong></span></td>
</tr>
<tr>
<td style="width: 35.21739130434783%;"><span style="font-size: 12px;"><strong>hyperlink.addressプロパティ</strong></span></td>
<td style="width: 31.449275362318843%;"><span style="font-size: 12px;"><strong>リンクの割り当て</strong></span></td>
<td style="width: 33.333333333333336%;"><span style="font-size: 12px;"><strong>URL設定</strong></span></td>
</tr>
</tbody>
</table>
<p>python-pptxについて詳しく知りたい場合には、公式ドキュメントがおすすめです</p>
<p><a href="https://python-pptx.readthedocs.io/en/latest/">python-pptx公式ドキュメント</a></p>
<div class="concept-box5">
<p style="text-align: center;"><span style="font-size: 20px;"><strong>おすすめプログラミングスクール(無料体験あり)<br />
</strong></span></p>
<a href="https://python-man.club/python_recommendation_school/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://python-man.club/wp-content/uploads/2022/06/今年のうちに読むべき書籍-6-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="python プログラミングスクール" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Pythonや機械学習を学べるプログラミングスクールおすすめ5選</span><span class="blog-card-excerpt">「pythonを学ぶのに、プログラミングスクールに通いたい」「pythonを学べるプログラミングスクールがたくさんあって、よくわからない」「結局、pythonを学ぶのにおすすめのプログラミングスクールってどこなの？」といった疑問をお持ちの方に、pythonを学ぶのにおすすめのプログラミングスクールを紹介していきたいと思います。...</span></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://python-man.club/python_python_pptx_text/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>pythonでパワポ操作〜python-pptxの導入からスライド作成〜【サンプルコードあり】</title>
		<link>https://python-man.club/python_python_pptx/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python_python_pptx</link>
					<comments>https://python-man.club/python_python_pptx/#comments</comments>
		
		<dc:creator><![CDATA[syou0445]]></dc:creator>
		<pubDate>Tue, 03 May 2022 22:01:41 +0000</pubDate>
				<category><![CDATA[python]]></category>
		<category><![CDATA[python-pptx]]></category>
		<category><![CDATA[python パワポ]]></category>
		<guid isPermaLink="false">https://python-man.club/?p=1122</guid>

					<description><![CDATA[pythonの得意なことといえば、事務作業の自動化が挙げられます その証拠に、python×excelといった書籍は多く販売されています Excel×Python最速仕事術 Excel×Python逆引きコードレシピ12]]></description>
										<content:encoded><![CDATA[<p>pythonの得意なことといえば、<strong><span class="marker">事務作業の自動化</span></strong>が挙げられます</p>
<p>その証拠に、<strong>python×excelといった書籍は多く販売</strong>されています</p>
<p><a href="https://amzn.to/3vCYdH7">Excel×Python最速仕事術</a></p>
<p><a href="https://amzn.to/3sbN51R">Excel×Python逆引きコードレシピ126</a></p>
<p><a href="https://amzn.to/3KEDIyj">できる 仕事がはかどるPython&amp;Excel自動処理 全部入り。 (できる全部入り。) </a></p>
<p>しかし、<span style="color: #ff0000;"><strong>python×パワポという書籍はまだありません</strong></span></p>
<p>そこで、<strong><span class="marker">今回はpythonでパワポを操作する方法について解説していきたいと思います</span></strong></p>
<p>パワポやエクセルなどは、会社員であれば、必ず使用するソフトです</p>
<p><strong><span class="marker">これらを自動化することができれば、作業時間をかなり短縮することができます</span></strong></p>
<div class="simple-box4">
<p style="text-align: center;"><span style="color: #ff0000;"><strong>この記事で学べること</strong></span><br />
<strong>pythonでパワポを操作する方法がわかる</strong><br />
<strong>python-pptxの導入方法と使い方がわかる</strong><br />
<strong>pythonからスライド作成ができる</strong></p>
</div>
<h2>pythonでパワポ操作〜python-pptxの導入〜</h2>
<img decoding="async" class="alignnone size-large wp-image-1134" src="https://python-man.club/wp-content/uploads/2022/05/computer-g3c95f6f62_1920-1024x683.jpg" alt="python パワポ操作" width="1024" height="683" srcset="https://python-man.club/wp-content/uploads/2022/05/computer-g3c95f6f62_1920-1024x683.jpg 1024w, https://python-man.club/wp-content/uploads/2022/05/computer-g3c95f6f62_1920-300x200.jpg 300w, https://python-man.club/wp-content/uploads/2022/05/computer-g3c95f6f62_1920-768x512.jpg 768w, https://python-man.club/wp-content/uploads/2022/05/computer-g3c95f6f62_1920-1536x1024.jpg 1536w, https://python-man.club/wp-content/uploads/2022/05/computer-g3c95f6f62_1920.jpg 1920w, https://python-man.club/wp-content/uploads/2022/05/computer-g3c95f6f62_1920-1024x683.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" />
<p>pythonでパワポを操作するには、python-pptxという外部ライブラリが必要になります</p>
<p>外部ライブラリがいまいちピンとこない方は、こちらの記事に目を通しておきましょう</p>
<p><a href="https://python-man.club/external_library/">pythonの外部ライブラリとは？</a></p>
<p>python-pptxを使用することで、PowerPointを起動せずとも、スライド作成をすることができます</p>
<h3>python-pptxでできること</h3>
<p>PowerPointを使って操作することは、python-pptxを使ってほぼ操作することができます</p>
<p>例えば、</p>
<ul>
<li><strong>スライド作成</strong></li>
<li><strong>スライドの追加・編集</strong></li>
<li><strong>テキストボックスの追加・編集</strong></li>
<li><strong>オートシェイプの作成と編集</strong></li>
<li><strong>グラフ・表・画像の挿入</strong></li>
</ul>
<p><span style="color: #ff0000;"><strong>このブログでは、上記の5種類を一通りマスターできるようにしていきます</strong></span></p>
<h3>python-pptxのインストール</h3>
<p>まずはpython-pptxをインストールしていきます</p>
<p>macではターミナル、windowsではコマンドプロンプトで以下のように入力します</p>
<pre class="language-python"><code>pip install python-pptx</code></pre>
<p>これでインストールは終わりですが、動作確認をしておきましょう</p>
<pre class="language-python"><code>from pptx import Presentation
prs=Presentation()</code></pre>
<p>spyder上で上記を入力して、実行します</p>
<p>jupyternotebookを使っている方は、そちらに入力していきます</p>
<p>これで、エラーが出なければOKです</p>
<h2>pythonでパワポ操作〜python-pptxでスライド作成〜</h2>
<img decoding="async" class="alignnone size-large wp-image-1135" src="https://python-man.club/wp-content/uploads/2022/05/andrew-neel-cckf4TsHAuw-unsplash-1024x683.jpg" alt="python パワポ操作2" width="1024" height="683" srcset="https://python-man.club/wp-content/uploads/2022/05/andrew-neel-cckf4TsHAuw-unsplash-1024x683.jpg 1024w, https://python-man.club/wp-content/uploads/2022/05/andrew-neel-cckf4TsHAuw-unsplash-300x200.jpg 300w, https://python-man.club/wp-content/uploads/2022/05/andrew-neel-cckf4TsHAuw-unsplash-768x512.jpg 768w, https://python-man.club/wp-content/uploads/2022/05/andrew-neel-cckf4TsHAuw-unsplash-1536x1024.jpg 1536w, https://python-man.club/wp-content/uploads/2022/05/andrew-neel-cckf4TsHAuw-unsplash.jpg 1920w, https://python-man.club/wp-content/uploads/2022/05/andrew-neel-cckf4TsHAuw-unsplash-1024x683.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" />
<p>インストールが完了したので、早速スライドを作成していきたいと思います</p>
<p>スライドを作成する上で、注意しておきたいのが、<span style="color: #ff0000;"><strong>レイアウト指定</strong></span>です</p>
<p>python-pptxではレイアウトを番号で指定していきますが、番号は以下のようになっています</p>
<ul>
<li><strong>0：Title Slide</strong></li>
<li><strong>1：Title and Content</strong></li>
<li><strong>2：Section Header</strong></li>
<li><strong>3：Two Content</strong></li>
<li><strong>4：Comparison</strong></li>
<li><strong>5：Title Only</strong></li>
<li><strong>6：Blank</strong></li>
<li><strong>7：Content with Caption</strong></li>
<li><strong>8：Picture with Caption</strong></li>
<li><strong>9：Title and Vertical Text</strong></li>
<li><strong>10：Vertical Title and Text</strong></li>
</ul>
<img decoding="async" class="alignnone size-large wp-image-1123" src="https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-20.52.00-1024x554.png" alt="python-pptxレイアウト" width="1024" height="554" srcset="https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-20.52.00-1024x554.png 1024w, https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-20.52.00-300x162.png 300w, https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-20.52.00-768x416.png 768w, https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-20.52.00-1536x832.png 1536w, https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-20.52.00.png 1603w, https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-20.52.00-1024x554.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" />
<p>左上から「0」スタートになります</p>
<p><strong><span class="marker">レイアウトは全部で11種類あるので、0〜10で指定をしていきます</span></strong></p>
<pre class="language-python"><code>from pptx import Presentation
#Presentationオブジェクトの取得
prs=Presentation()

#1ページ目（「タイトル スライド」のレイアウトを指定）
slide_layout_0 = prs.slide_layouts[0]
slide_1 = prs.slides.add_slide(slide_layout_0)

#PowerPointを保存
prs.save("create_powerpnt.pptx")</code></pre>
<p>それ以外のスライドレイアウトは以下のように指定することができます</p>
<pre class="language-python"><code>from pptx import Presentation
prs=Presentation()

#1ページ目（「タイトル スライド」のレイアウトを指定）
slide_layout_0 = prs.slide_layouts[0]
slide_1 = prs.slides.add_slide(slide_layout_0)

slide_layout_1 = prs.slide_layouts<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank01.png" />
slide_2 = prs.slides.add_slide(slide_layout_1)

slide_layout_2 = prs.slide_layouts<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank02.png" />
slide_3 = prs.slides.add_slide(slide_layout_2)

slide_layout_3 = prs.slide_layouts<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank03.png" />
slide_4 = prs.slides.add_slide(slide_layout_3)

slide_layout_4 = prs.slide_layouts<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank04.png" />
slide_5 = prs.slides.add_slide(slide_layout_4)

slide_layout_5 = prs.slide_layouts[5]
slide_6 = prs.slides.add_slide(slide_layout_5)

slide_layout_6 = prs.slide_layouts[6]
slide_7 = prs.slides.add_slide(slide_layout_6)

slide_layout_7 = prs.slide_layouts[7]
slide_8 = prs.slides.add_slide(slide_layout_7)

slide_layout_8 = prs.slide_layouts[8]
slide_9 = prs.slides.add_slide(slide_layout_8)

slide_layout_9 = prs.slide_layouts[9]
slide_10 = prs.slides.add_slide(slide_layout_9)

slide_layout_10 = prs.slide_layouts[10]
slide_11 = prs.slides.add_slide(slide_layout_10)
#PowerPointを保存
prs.save("create_powerpnt.pptx")</code></pre>
<p>新しいスライドを追加する際には、</p>
<pre class="language-python"><code>#＊には0〜10の数値を入力
prs.slides.add_slide(slide_layout＊)</code></pre>
<p>と指定してあげます</p>
<h3>プレースホルダーの説明</h3>
<p>プレースホルダーというのは、スライドの中の個々のものを指しています</p>
<img decoding="async" class="alignnone size-full wp-image-1131" src="https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-23.54.04.png" alt="プレスーホルダー" width="724" height="542" />
<p>プレースホルダーは全部で19種類用意されています</p>
<p><a href="https://python-pptx.readthedocs.io/en/latest/api/enum/PpPlaceholderType.html#pp-placeholder-type">プレースホルダー</a></p>
<p>PowerPoint自体には、プレースホルダーは31種類の組み合わせがある、とも言われています</p>
<p><a href="https://allabout.co.jp/gm/gc/298109/">パワーポイントのプレースホルダーとは？</a></p>
<p>テキストのプレースホルダーを編集する場合には、</p>
<pre class="language-python"><code>from pptx import Presentation
prs=Presentation()

#1ページ目（「タイトル スライド」のレイアウトを指定）
slide_layout_0 = prs.slide_layouts[0]
slide_1 = prs.slides.add_slide(slide_layout_0)

#テキストの編集
title=slide_1.placeholders[0]
title.text="タイトルの編集"
subtitle=slide_1.placeholders<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank01.png" />
subtitle.text="サブタイトル"
#PowerPointを保存
prs.save("powerpnt.pptx")</code></pre>
<p>プレースホルダーの数値は以下のように設定されています</p>
<img decoding="async" class="alignnone size-full wp-image-1132" src="https://python-man.club/wp-content/uploads/2022/05/スクリーンショット-2022-05-03-23.59.58.png" alt="プレースホルダー1" width="715" height="534" />
<p>テキストは当然ですが、表や画像、図形用のプレースホルダーも用意されています</p>
<h3>既存のプレゼンテーションを読み込む</h3>
<p>既存のプレゼンテーションを読み込む場合には、</p>
<pre class="language-python"><code>from pptx import Presentation
prs=Presentation('.pptx')</code></pre>
<p>上記のように引数を、既存のパワーポイントファイルのパス名で指定することで、読み込むことができます</p>
<h3>既存のスライドを読み込む</h3>
<p>既存のスライドを読み込む場合には、</p>
<pre class="language-python"><code>from pptx import Presentation
prs=Presentation('.pptx')
#＊には0からの数値を入力
prs.slides[＊]</code></pre>
<p>と指定することで既存のスライドを読み込むことができます</p>
<p>さらにテキストを編集する場合には、</p>
<pre class="language-python"><code>from pptx import Presentation
prs=Presentation('.pptx')

#1ページ目（「タイトル スライド」のレイアウトを指定）
slide_layout_0 = prs.slide_layouts[0]
slide_1 = prs.slides.add_slide(slide_layout_0)
old_sld0_layout0=prs.slides[0]

#テキストの編集
title=old_sld0_layout0.placeholders[0]
title.text="既存スライドタイトルの編集"
subtitle=slide_1.placeholders<img decoding="async" class="ranking-number" src="https://python-man.club/wp-content/themes/jin/img/rank01.png" />
subtitle.text="既存スライド再読み込み"
#PowerPointを保存
prs.save("powerpnt.pptx")</code></pre>
<p>とすることで、既存スライドのテキストを編集することができます</p>
<p>この状態で保存をすると、上書き保存になりますが、<span style="color: #ff0000;"><strong>上書き保存時にアラートは出ない</strong></span>ので、気をつけておく必要があります</p>
<p><strong><span class="marker">これで新規・既存PowerPointファイルにスライドを追加できるようになりました</span></strong></p>
<p><strong>次回はスライドの編集について深掘りしていきたいと思います</strong></p>
<div class="concept-box5">
<p style="text-align: center;"><span style="font-size: 20px;"><strong>おすすめプログラミングスクール(無料体験あり)<br />
</strong></span></p>
<a href="https://python-man.club/python_recommendation_school/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://python-man.club/wp-content/uploads/2022/06/今年のうちに読むべき書籍-6-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="python プログラミングスクール" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Pythonや機械学習を学べるプログラミングスクールおすすめ5選</span><span class="blog-card-excerpt">「pythonを学ぶのに、プログラミングスクールに通いたい」「pythonを学べるプログラミングスクールがたくさんあって、よくわからない」「結局、pythonを学ぶのにおすすめのプログラミングスクールってどこなの？」といった疑問をお持ちの方に、pythonを学ぶのにおすすめのプログラミングスクールを紹介していきたいと思います。...</span></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://python-man.club/python_python_pptx/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
