python-pptxでパワポのテキストの特定の文字列の色を変える方法
ChatGPTに聞いたら一発だった
ちゃんとコードを見直してどうやってるのか見直さないと
考える癖なくなっちゃう
ChatGPT質問.txt
python-pptx で一個のテキストボックスを作成して、指定したテキストデータを入力するものとします。
・テキストデータが複数行なら段落を分けて入力する関数
指定例
textsharp = textboxset(textsharp,textdata)
・指定したワードのフォント色を指定した色に変える関数
指定例
textsharp = setwordcolor(textsharp,word1,color1)
textsharp = setwordcolor(textsharp,word2,color2)
textsharp = setwordcolor(textsharp,word3,color3)
直列処理も可能とする
それぞれ作成してください
ppt_textcolor.py
from pptx import Presentation
from pptx.util import Pt
from pptx.dml.color import RGBColor
def textboxset(slide, textdata, left, top, width, height):
"""
テキストボックスを作成し、テキストデータを段落ごとに入力する。
Args:
slide: スライドオブジェクト
textdata: テキストデータ(複数行の文字列)
left: テキストボックスの左位置(Pt単位)
top: テキストボックスの上位置(Pt単位)
width: テキストボックスの幅(Pt単位)
height: テキストボックスの高さ(Pt単位)
Returns:
text_box: 作成されたテキストボックスのオブジェクト
"""
textbox = slide.shapes.add_textbox(left, top, width, height)
text_frame = textbox.text_frame
text_frame.clear()
# テキストを段落ごとに分割して設定
for line in textdata.splitlines():
p = text_frame.add_paragraph()
p.text = line
# 最初の段落は既存の段落が利用されるため削除
if text_frame.paragraphs[0].text == "":
text_frame.paragraphs[0]._element.getparent().remove(text_frame.paragraphs[0]._element)
return textbox
def setwordcolor(textbox, word, color):
"""
テキストボックス内の指定ワードのフォント色を変更する。
Args:
textbox: テキストボックスオブジェクト
word: 色を変更したい文字列
color: 変更後の色 (RGBタプル形式: (R, G, B))
Returns:
textbox: 更新されたテキストボックス
"""
for paragraph in textbox.text_frame.paragraphs:
for run in paragraph.runs:
if word in run.text:
# ワードの位置を見つけて部分変更
start_index = run.text.find(word)
end_index = start_index + len(word)
before = run.text[:start_index]
target = run.text[start_index:end_index]
after = run.text[end_index:]
# 元の文字列を削除して、新しいフォーマットの文字列を挿入
run.text = before
if before:
run = paragraph.add_run()
run.text = target
run.font.color.rgb = RGBColor(*color)
if after:
run = paragraph.add_run()
run.text = after
return textbox
# 使用例
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
# テキストデータ入力
textdata = """This is a test.
python-pptx is useful.
You can customize your slides."""
textbox = textboxset(slide, textdata, Pt(100), Pt(100), Pt(400), Pt(200))
# 指定ワードの色変更
textbox = setwordcolor(textbox, "test", (255, 0, 0)) # 赤
textbox = setwordcolor(textbox, "python-pptx", (0, 255, 0)) # 緑
textbox = setwordcolor(textbox, "slides", (0, 0, 255)) # 青
# プレゼンテーションを保存
prs.save("output.pptx")