PySimpleGUI

【PySimpleGUIでアプリ開発】WordからExcelへデータを取り出す

本記事ではpython-docxで作ったwordファイルの表データからデータを取り出してOpenPyXLでExcelに出力するアプリの作り方を紹介します。

アプリ化した理由としてはexe化してPython環境のないPCでも使え、コンソール画面上ではなく直感的に操作できた方が使いやすいと考えたからです。

GUIはPySimpleGUIを使いましたが、少ないコードで簡単にGUIが作れるのでおすすめなライブラリです。

本記事では4つのPythonライブラリを使用します。

インストールがまだの方はリンクを参考に導入をしてから本記事で紹介するコードを書いてください。

今回紹介するライブラリはこちらです。

↓参考になる記事のリンクを貼り付けています

python-docx
OpenPyXL
PySimpleGUI
pyinstaller(exe化したい場合のみ)

完成イメージ

python-docxで作ったwordファイルの表データからデータを取り出してExcelに出力するやり方を紹介します。

コードの解説

GUIの作成

ますは図のようなGUIを作成していきます。

必要なライブラリをインポートします。

import PySimpleGUI as sg
import openpyxl
import docx

テーマを選択します。今回はDarkBlue1を使用します。

sg.theme('DarkBlue1')

レイアウト部分を作っていきます。

PysimpleGUIについての詳細はこちらのアーカイブを参考にしてください。

本記事では簡単にのみ説明していきます。

レイアウトはlayout=[]で囲み、要素を入力してきます。

今回使用する要素は以下のとおりです。

sg.T(”)・・・テキスト表示
sg.InputText()・・・テキスト入力部分
sg.FileBrowse()・・・ファイルアップローダ起動
sg.Button()・・・ボタン表示

layout =[[sg.T('wordファイルからデータを取り出してExcelへ出力する')],
         [sg.T('ファイル選択'), sg.InputText(), sg.FileBrowse(key='file1')],
         [sg.Button('登録',key='touroku'), sg.Button('閉じる',key='quit',button_color=('white', '#0e6251'))]]

window部分を作成します。

window = sg.Window('Word to Excel変換アプリ', layout)

イベント部分を作成します。

while True:
    event, values = window.read()
    
    if event == sg.WIN_CLOSED or event == 'quit':
        break
    elif event == 'touroku':
window.close()

次に登録ボタン(key=touroku)が押された場合のeventを作成していきます。

Excelファイルの準備

test_excel.xlsxというExcelファイルを用意します。

日付・内容の項目名はあらかじめ入力しておきます。

openpyxlで読み込み、シートをアクティブにします。

wb=openpyxl.load_workbook('test_excel.xlsx')
ws=wb.active

Wordファイルの操作部分

doc.tablesでテーブルを読み込むようにしておきます。

tbl = doc.tables[0]  

そのテーブル内にある各セルの情報を関数に代入しておきます。

date1=tbl.cell(1, 1).text
date2=tbl.cell(2, 1).text
date3=tbl.cell(3, 1).text
        
content1=tbl.cell(1, 2).text
content2=tbl.cell(2, 2).text
content3=tbl.cell(3, 2).text

Excelファイルへの書き込み

Excelへの書き込みは最終行を取得して書き込むようにしておきます。

複数のWordファイルからデータを取得したい場合にも対応できます。

Excelのセルに先程のWordの情報を代入した変数をvalueとして指定します。

最後にsaveして完了です。

maxRow = ws.max_row + 1
ws.cell(row=maxRow,column=1,value=date1)
ws.cell(row=maxRow+1,column=1,value=date2)
ws.cell(row=maxRow+2,column=1,value=date3)
ws.cell(row=maxRow,column=2,value=content1)
ws.cell(row=maxRow+1,column=2,value=content2)
ws.cell(row=maxRow+2,column=2,value=content3)
wb.save('test_excel.xlsx')

登録完了のポップアップ

無事に完了したことをポップアップで表示させる仕様にしておきます。

sg.popup('完了')

実際にWordファイルを選択して登録ボタンを押してみます。

test_word

test_excel.xlsxを開いてみます。

内容が追加されていれば完了です。

コード全体

import PySimpleGUI as sg
import openpyxl
import docx

sg.theme('DarkBlue1')

layout =[[sg.T('wordファイルからデータを取り出してExcelへ出力する')],
         [sg.T('ファイル選択'), sg.InputText(), sg.FileBrowse(key='file1')],
         [sg.Button('登録',key='touroku'), sg.Button('閉じる',key='quit',button_color=('white', '#0e6251'))]]

window = sg.Window('Word to Excel変換アプリ', layout)

while True:
    event, values = window.read()
    
    if event == sg.WIN_CLOSED or event == 'quit':
        break
    elif event == 'touroku':
        doc = docx.Document(values['file1'])
        
        wb=openpyxl.load_workbook('test_excel.xlsx')
        ws=wb.active
        tbl = doc.tables[0]         
        date1=tbl.cell(1, 1).text
        date2=tbl.cell(2, 1).text
        date3=tbl.cell(3, 1).text
        
        content1=tbl.cell(1, 2).text
        content2=tbl.cell(2, 2).text
        content3=tbl.cell(3, 2).text

        maxRow = ws.max_row + 1
        ws.cell(row=maxRow,column=1,value=date1)
        ws.cell(row=maxRow+1,column=1,value=date2)
        ws.cell(row=maxRow+2,column=1,value=date3)
        ws.cell(row=maxRow,column=2,value=content1)
        ws.cell(row=maxRow+1,column=2,value=content2)
        ws.cell(row=maxRow+2,column=2,value=content3)
        wb.save('test_excel.xlsx')
        sg.popup('完了')
     
window.close()

exe化について

pyinstallerについて

Python環境がないPCでもこのアプリを使えると便利ですよね。

そんな時に使えるツールがpyinstallerです。

簡単なPythonファイルであれば簡単にexe化できてしまいます。

一通り解説しているので試してみてください。

【Pythonでexeファイル作成】pyinstallerで誰でも簡単に.pyを起動 pyインストーラを使うとexeファイルが作成できるのでpython環境がないPCでもPythonファイルを実行することができます。 今...
ABOUT ME
Mickey@コーヒー好きエンジニア
【製造業×プログラミング×AI】Python/VBAを活用した業務改善、Streamlit/Plotlyを活用したWebアプリ開発について初心者向けに発信中|Wordpressブログを運営しながらHTML/CSSの勉強中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信
【製造×プログラミング×AI】
Mickey@コーヒー好きエンジニア
【製造業×プログラミング×AI】ロボット×画像処理×AI×3現主義が得意な生産技術者|Python/VBAを活用した業務改善、Streamlit/Plotly/PySimpleGUIなどを活用したアプリ開発について初心者向けに発信中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信|iOSアプリ開発も始めました
\ Follow me /