実現したいこと
パワーポイントを自動で繰り返し処理を用いて作成したい
1.エクセルの情報を抽出
↓
2.エクセルから抽出した情報をタイトルとテキストに反映
↓
3.2番目をデータ分繰り返し、1つのパワーポイントファイルに複数のページを作成
できている内容
・エクセルのデータを抽出してlistに格納
・パワーポイント自動作成
できない内容
・エクセルから抽出した情報をタイトルとテキストにいれる
※「パワーポイント自動作成コード」に記載の★箇所にエクセルで取得したデータを入れて、PPTシートをデータ分作成することが出来ない。
補足情報(FW/ツールのバージョンなど)
pythonバージョン ⇒ Python 3.8.0
python実行環境 ⇒ windows10
file構成 ⇒ デスクトップに「python」ディレクトリを設置
pythonディレクトリ内の設置物 ⇒ pythonコードファイル、エクセルファイル、テンプレート用PPT
エクセルファイル名 ⇒ data.xlsx
PPTファイル名 ⇒ templat.pptx
エクセル情報
パワーポイント自動作成コード
# coding: cp932 # ---必要なモジュールをimport--- from pptx import Presentation from pptx.chart.data import ChartData from pptx.enum.chart import XL_CHART_TYPE from pptx.util import Inches from pptx.util import Pt, Inches # ---大きさの単位変更--- # センチメートルをPowerPoint上の距離に変換する関数 def Centis(length): centi = Inches(length/2.54) return centi # ---スライド作成--- # 1枚のスライドでプレゼンテーションを作成する※今回はPPTを指定した prs = Presentation('templat.pptx') # 1枚目のスライドのレイアウトを使用するように指定 title_only_slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(title_only_slide_layout) shapes = slide.shapes # タイトルに入力したい文字列 slide_title = '★C列の題名を入れたい★' shapes.title.text = slide_title # ---------- # 前月のテキストボックスの位置を決める left_Sub = Centis(1.0) top_Sub = Centis(2.3) # 前月のテキストボックスの幅と高さを決める width_Sub = Centis(4.4) height_Sub = Centis(0.86) txBoxSub = slide.shapes.add_textbox(left_Sub, top_Sub, width_Sub, height_Sub) tfSub = txBoxSub.text_frame tfSub.text = '★D列のサブ題名を入れたい★' # フォントサイズ・書体名変更 tfSub.paragraphs[0].font.size = Pt(14) tfSub.paragraphs[0].font.name = 'メイリオ' # ---------- # 前月のテキストボックスの位置を決める left = Centis(2.17) top = Centis(2.97) # 前月のテキストボックスの幅と高さを決める width = Centis(2.17) height = Centis(0.86) txBox = slide.shapes.add_textbox(left, top, width, height) tf = txBox.text_frame tf.text = "★A列の前月を入れたい★" # フォントサイズ・書体名変更 tf.paragraphs[0].font.size = Pt(14) tf.paragraphs[0].font.name = 'メイリオ' # 今月のテキストボックスの位置を決める left_Month = Centis(2.17) top_Month = Centis(10.79) # 今月のテキストボックスの幅と高さを決める width_Month = Centis(2.17) height_Month = Centis(0.86) txBoxMonth = slide.shapes.add_textbox(left_Month, top_Month, width_Month, height_Month) tfMonth = txBoxMonth.text_frame tfMonth.text = '★B列を入れたい★' # フォントサイズ変更 tfMonth.paragraphs[0].font.size = Pt(14) tfMonth.paragraphs[0].font.name = 'メイリオ' prs.save('chart-01.pptx')
エクセルデータをlistに格納
import openpyxl # ブック取得 wb = openpyxl.load_workbook("data.xlsx") # シートを取得 sheet = wb["Sheet1"] #A列のデータのみ取り出す ※10月 #値の入っている最大行、最大列まで行単位でセルの値を取得する for rows in sheet.iter_rows(min_row=2, min_col=1, max_col=1): for cell in rows: list_A = cell.value print(list_A) #B列のデータのみ取り出す ※11月 #値の入っている最大行、最大列まで行単位でセルの値を取得する for rows in sheet.iter_rows(min_row=2, min_col=2, max_col=2): for cell in rows: list_B = cell.value print(list_B) #C列のデータのみ取り出す ※title #値の入っている最大行、最大列まで行単位でセルの値を取得する for rows in sheet.iter_rows(min_row=2, min_col=3, max_col=3): for cell in rows: list_C = cell.value print(list_C) #D列のデータのみ取り出す ※sub title #値の入っている最大行、最大列まで行単位でセルの値を取得する for rows in sheet.iter_rows(min_row=2, min_col=4, max_col=4): for cell in rows: list_D = cell.value print(list_D)
最終イメージPPT
試したこと
forを使用して繰り返し処理を行おうと思いましたが、プログラムを作った経験が今回が初めてで、どのように書いたらいいのかイメージが湧きませんでした。
お力添えいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/09 08:24 編集
退会済みユーザー
2021/03/09 12:16
2021/03/10 04:13