今回はエクセルファイルを読み込んで、そのファイルにデータを追記したいと思います。
使うライブラリーはopenpyxlです。
前回はWebスクレイピングのためにホームページにアクセスして特定のタグ内のデータを取得する方法を学んだので次に集めたデータを保存したいなと思いました。
前回の記事[Python]ホームページにアクセスして特定のタグ内のデータを取得する方法
Pythonは簡単にExcelデータをいじれると見たのでエクセルにデータを保存するという事を試してみました。
↓まずは全体のコードを貼っておきます
↓こちらが読み込むのを想定した仮のエクセルデータです
作ってから思ったのですが、仮のデータでも商品の名前や値段とかにしておけばよかったと思いました。
このデータだと、個人情報を収集して悪い事をするみたいなイメージになってしまいますね・・・。
これで用意してしまったので、このまま先に進みます。
openpyxl のインストールは
pip install openpyxl
でできます。
では、まずインポートの部分ですが、
import openpyxl as op
これでopenpyxlを使えるようになります
その下の
from openpyxl.styles.alignment import Alignment
↑これはセルにスタイルを適用したい時に必要なので呼び出してあります。
↓用意したエクセルデータを読み込んで、変数wbに代入しています。
wb = op.load_workbook ( "excel_test_data_xlsx" )
私はjupyter labの環境で試していて、デスクトップにフォルダを作り、そこにjupyter labのPythonファイルを作成しています。
そこと同フォルダにこのエクセルファイルを置くとこれで読み込めるようになります。
wbはworkbookの略です。
ws = wb["Sheet1"]
↑これでシートを指定して読み込んでいます。
wsはworksheetの略です。
↑念のため言っておくとシートの名前とはこれの事です。
大文字、小文字を間違えるとエラーになるのでご注意下さい。
今回はExcelファイルを読み込んで最終行に追記するという事をしたいので、ファイルに何行あるか確認します。
max_row = ws.max_row + 1
↑ws.mas_rowで何行あるかが返り値として戻ってきてそれに1を足しています。
エクセルデータを見ると5行データがありますので ws.max_row は5が返ってきます。
ws.cell ( row = max_row ,column = 1 ).value = '2017/3/12'
ws.cell ( row = max_row ,column = 2 ).value = '竹中'
ws.cell ( row = max_row ,column = 3 ).value = '090-2251-xxxx'
ws.cell ( row = max_row ,column = 4 ).value = '岩手県'
ws.cell ( row = max_row ,column = 5 ).value = '584-9987'
↑row が行になり、 column が列になります。
エクセルでいうと一番左の上から下に数字が書いてあるのrow(行)です。
上の左から右にアルファベットが書いてあるのがcolumn(列)です。
なので ws.cell ( row = max_row ,column = 1 ).value = '2017/3/12' と書いてあると
ws.cell ( row = 6 ,column = 1 ).value = '2017/3/12' となり
縦の行の6の数字の所のcolumn1番めとなるのでセルでいうとA6となります。
そこのvalueは値という意味なのでA6の値を '2017/3/12' にするという意味になります。
しかしこのままだと文字列の '2017/3/12' となってしまって、これを日付にして、右寄せにしたいと思います。
(何もしないと左寄せになります)
ws["A6"].number_format = "yyyy/m/d"
↑これが日付のフォーマットを適用している部分です。
ws.cell ( row = max_row ,column = 1 ).alignment = Alignment ( horizontal = 'right', vertical = 'center')
↑ここで右寄せに指定しています。ここの Alignment を使うためにimportしました。
horizontalは水平方向です。これがrightに指定されてるので右寄せになります。
verticalは垂直方向の指定になります。
wb.save('excel_test_data2.xlsx')
↑最後にワークブックをセーブすると書き込み完了です。(wsではなくwbなのでお間違えなく)
これだけの短いプログラムでエクセルの読み込みから書き込みまで出来るのは便利ですね。
以上openpyxlを使ってエクセルファイルを読み込んで追記するプログラムでした。