稼働中

(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」を選択します。
openpyxl 検索
「Install」をクリックします。
openpyxl インストール
「openpyxl」がインストールされました。
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’が追加されています。
'pyxls_01.xlsx'

エクセルのシートに書き込む

データを書き込んでみます。
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’を確認します。
'pyxls_01.xlsx'書込み

リストデータを書き込む

以上を使ってリストデータを書き込んでみます。
リストデータを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ファイルにデータの書込みができました。
フォントの変更やデータの追加などの操作ができたと思います。