本記事ではpython-docxで作ったwordファイルの表データからデータを取り出してOpenPyXLでExcelに出力するアプリの作り方を紹介します。
アプリ化した理由としてはexe化してPython環境のないPCでも使え、コンソール画面上ではなく直感的に操作できた方が使いやすいと考えたからです。
GUIはPySimpleGUIを使いましたが、少ないコードで簡単にGUIが作れるのでおすすめなライブラリです。
本記事では4つのPythonライブラリを使用します。
インストールがまだの方はリンクを参考に導入をしてから本記事で紹介するコードを書いてください。
完成イメージ
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_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化できてしまいます。
一通り解説しているので試してみてください。