LoginSignup
4
7

More than 3 years have passed since last update.

pythonでパワーポイントを修正する

Last updated at Posted at 2019-05-08

はじめに

訳あってwebページの表(予定が書かれている)をパワーポイントに書く作業があります。
しかも2ページくらいあるから、転記作業だけでも結構時間がかかります。
そこでwebサイト→パワーポイントに転記作業をpythonで自動化します。
したかった…

環境

  • mac
  • python 3.7.3

コード

よみこみ

todayPP.py

# coding: UTF-8

from pptx import Presentation
from pptx.util import Pt
from pptx.enum.text import PP_ALIGN
from bs4 import BeautifulSoup
import configparser
import requests
import feedparser
import datetime
import csv

パワポつくるところのメイン処理

todayPP.py

# パワーポイントを生成
def createPP(iniFile):
    prs = Presentation(iniFile.get('settings', 'IN'))

    # htmlから情報を取得
    inputTable = getInputTable(iniFile)

    # 表を変更
    editPPTable(iniFile, prs.slides[0].shapes[0].table, prs.slides[1].shapes[1].table, inputTable)

    # ファイルを保存
    prs.save(iniFile.get('settings', 'OUT') + createFileName() + '.pptx')

htmlから情報を取得するところ。一旦保存したやつを見に行ったけど、selenium使って直で見に行ってもいいかも。

todayPP.py
# データ元の情報を取得
def getInputTable(iniFile):

    # 保存したhtmlを取得
    with open(iniFile.get('settings', 'HTML'), encoding="shift_JIS", errors='ignore') as f:
        html = f.read()

    #要素を抽出
    soup = BeautifulSoup(html, 'lxml')

    # テーブルを指定
    return soup.findAll("table")[0]

パワポの表を修正するところ。2ページあるのでtabel1、table2に分けている。

todayPP.py

# パワーポイントのテーブルを修正
def editPPTable(iniFile, table1, table2, inputTable):
    # 要素を取得
    tdList = inputTable.findAll("td", attrs = {"class": "p11pa2"})

    # 設定に必要なcsvを取得
    directory = getDirectory(iniFile.get('settings', 'CSV'))

    for td in tdList:

        # 行番号を取得。なければ飛ばす
        if directory[td.text[:3]][1] != '':
            rowNum = int(directory[td.text[:3]][1])

            contents = td.parent.findAll("td", attrs = {"class": "p11"})
            for i,content in enumerate(contents):

                # テーブル番号、列番号を設定
                if directory[td.text[:3]][2] == '1':
                    changeTable = table1
                    columnNum   = 2 + i

                else:
                    changeTable = table2
                    columnNum   = 1 + i

                # テキストを設定
                changeCell = changeTable.cell(rowNum, columnNum)
                changeCell.text = changeStr(content.get_text('.').split('.'))

                # レイアウトを修正
                changeLayout(changeCell, 10)

# セルのフォントサイズを変更して、中央揃えにする
def changeLayout(cell, size):
    for paragraph in cell.text_frame.paragraphs:
        for run in paragraph.runs:
            run.font.size = Pt(size)

        # 中央揃えにもする
        paragraph.alignment = PP_ALIGN.CENTER

HTML表からpptx表への付け合せについては、CSVで設定取得を行いました。
1列目:検索コード
2列目:見出し(これは使わなかった)
3列目:どの行か
4列目:どの表か

todayPP.py
# CSVを取得
def getDirectory(csvPath):

    directory = {}

    with open(csvPath, 'r') as f:
        reader = csv.reader(f)

        for row in reader:
            directory[row[0]] = [row[1],row[2],row[3]]

    return directory

結果

なんとかいきましたが、以下問題は残る・・・・

  • 表が左詰めになってしまった
  • 要素直指定。検索かけにいくようにしたい

でもフォントサイズも変更できたし、中央そろえにできてよかった。
あと転記作業から開放されて超ハッピー

github

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7