(v_19)Python Excelファイルに書き込み openpyxl

Excelファイルに書き込み openpyxl
PythonでExcelファイルにデータの書込みを試してみます。
Excelファイルのシートデータの分析や処理するにはpandas、
フォントやデータの追加など部分的な操作するならopenpyxlが便利そうです。
openpyxlを使ってリスト型のデータをExcelファイルに保存したいと思います。
※Pythonの開発環境はThonny、実際の表計算はLibreOffice Calcを使用しています。
openpyxlのインストール
openpyxlをインストールします。
開発環境はThonnyを使用しています。そのためManage plug-insから簡単にpandasをインストールできます。
検索窓に「openpyxl」を入力して、右の「Search on PyPi」をクリックします。
検索結果が表示されます。一番、上の「openpyxl」を選択します。

「Install」をクリックします。

「openpyxl」がインストールされました。

ワークブックの新規作成と保存
Excelファイルデータをopenpyxlで読み書きする例を示します。
※ThonnyのShellで試しています。
Workbookオブジェクトを作成します。
>>> from openpyxl import Workbook
>>> wb=Workbook()
>>> type(wb)
<class 'openpyxl.workbook.workbook.Workbook'>
新しいシートを作ります。シート名を’test_01’とします。
>>> sheet_name='test_01'
>>> wb.create_sheet(sheet_name)
<Worksheet "Sheet1">
エクセルファイル名’pyxls_01.xlsx’で保存します。
>>> file_name='pyxls_01.xlsx'
>>> wb.save(file_name)
workbookを閉じます。T
>>> wb.close()
Thonnyのワークフォダに保存されています。

エクセルファイル’pyxls_01.xlsx’を確認します。
シート’test_01’が追加されています。

エクセルのシートに書き込む
データを書き込んでみます。
load_workbook でワークブックの読み込みます。※file_name=’pyxls_01.xlsx’
>>> from openpyxl import load_workbook
>>> wb=load_workbook(file_name)
ワークシートを指定します。※sheet_name=’test_01′
>>> ws=wb[sheet_name]
>>> type(ws)
<class 'openpyxl.worksheet.worksheet.Worksheet'>
ワークシートに何か書き込んでみます。
セル’A1’で指定して’Hello Hello’を書き込みます。
>>> ws['A1'] = 'Hello Hello'
セル’C5’をcell(5,3)で指定して’123’を書き込みます。※#’C5’==5行3列
>>> ws.cell(5,3).value='123'
保存して閉じます。
>>> wb.save(file_name)
>>> wb.close()
エクセルファイル’pyxls_01.xlsx’のシート’test_01’を確認します。

リストデータを書き込む
以上を使ってリストデータを書き込んでみます。
リストデータをD5から書き込みます。
d_list=[
['リストデータ'],
['ID-No.', '名前', '年齢'], ['001', '山田', '24'],
['002', '三木', '18'], ['003', '斎藤', '40'],
['004', '佐藤', '33'], ['005', '高橋', '42'],
]
スクリプトは以下のようにしました。
pyxls_cell_01b.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from openpyxl import Workbook
from openpyxl import load_workbook
#指定したCell位置からリストデータを書き込む
file_name='pyxls_01.xlsx'
sheet_name='test_01'
#ワークブックの読み込み
wb=load_workbook(file_name)
ws=wb[sheet_name]
# D5から
x_cell=4 #D列 カラム
y_cell=5 #5行
#リストデータ
d_list=[
['リストデータ'],
['ID-No.', '名前', '年齢'], ['001', '山田', '24'],
['002', '三木', '18'], ['003', '斎藤', '40'],
['004', '佐藤', '33'], ['005', '高橋', '42'],
]
#リストデータ(ws_dat)をExcelファイル(ワークシート ws)に書き込む
for row in range(len(d_list)):
col=0
for dat in d_list[row]:
#print(row+1,col+1, dat)
#ws.cell(1,1).value='ABC'
ws.cell(row+y_cell, col+x_cell).value=dat
col=col+1
#上書き保存
wb.save(file_name)
wb.close()
■実行結果の確認
エクセルファイル’pyxls_01.xlsx’のシート’test_01’を確認します。D5から記入できています。
ちなみに、先のデータ’Hello Hello’、’123’はエクセルで文字色を変更後にスクリプトを実行しています。
上書き部分以外は文字色やフォントなどは変更されないようです。

フォントを変更する
フォントを変更するにはモジュールをインポートします。Thonnyのshellで実行してみます。
>>> from openpyxl.styles import Font
※wb、wsは前述と同じで指定されているものとします。
現在の”A1″の’Hello Hello’のフォントは‘Calibri’で文字サイズは11pt、文字色は青色です。
フォントを’Meiryo UI’、文字サイズを14pt、太字、文字色を赤色にしてみます。
以下で指定します。
>>> font = Font(name='Meiryo UI', size=12, bold=True, color='ff0000')
>>> ws["A1"].font = font
保存します。
>>> wb.save(file_name)
>>> wb.close()
エクセルファイル’pyxls_01.xlsx’のシート’test_01’を確認します。
“A1″の’Hello Hello’のフォントが変更されています。

ちなみにシート全体のフォントを書換える場合は以下のようにするそうです。
フォントを’Meiryo UI’、文字サイズを11pt、文字色を黒色にしてみます。
>>> font = Font(name='Meiryo UI', size=11,color='000000')
>>> for row in ws:
for cell in row:
ws[cell.coordinate].font = font
保存します。
>>> wb.save(file_name)
>>> wb.close()
エクセルファイル’pyxls_01.xlsx’のシート’test_01’を確認します。
シート全体のフォントが変更されています。

まとめ
openpyxlを使ってExcelファイルにデータの書込みができました。
フォントの変更やデータの追加などの操作ができたと思います。










