1. はじめに
以前にxlsxwriterを利用したExcelの作成について記事にしましたが、xlsxwriterではExcelの読み込みができないことが分かりました。そこで今回はoepnpyxlを利用して、事前に用意したExcelテンプレートファイルからExcel帳票を作成する方法について説明したいと思います。
(以前の記事)
2. ソースコード
# -*- coding: utf-8 -*-
import openpyxl
import datetime
# report excel using template file
def write():
# ★ポイント1
# テンプレートファイルを読み込む
workbook = openpyxl.load_workbook('reservationTemplate.xlsx')
# ゼロからExcelファイルを作る場合
# workbook = openpyxl.Workbook()
# ★ポイント2
worksheet = workbook.get_sheet_by_name(u'予約')
# ★ポイント3
# 行、列は1開始のインデックス
worksheet.cell(row=5, column=6).value = unicode('12345678', 'utf-8')
# ★ポイント4
# 書式フォーマットは再設定が必要
currentFormat = worksheet['AA5'].number_format
worksheet['AA5'].value = datetime.date.today()
worksheet['AA5'].number_format = currentFormat
# ★ポイント5
workbook.save('reservation.xlsx')
if __name__=='__main__':
write()
★ポイント1
最初にopenpyxl.load_workbook()
でExcelのワークブックのインスタンスを生成します。
引数には読み込むExcelテンプレートファイルのファイル名を指定します。
ちなみに、ゼロからExcelファイルを作成する場合はopenpyxl.Workbook()
でワークブックのインスタンスを生成します。
★ポイント2
次にworkbook.get_sheet_by_name()
でワークシートを選択します。
引数にはワークシート名を指定します。unicodeで指定すれば日本語のシート名でも動作します。
★ポイント3
セルの選択方法はR1C1形式(行と列を個別に指定)とA1形式の2つがあります。
R1C1形式の場合、worksheet.cell(row=行番号, column=列番号)
でセルを選択します。
行番号と列番号は0ではなく1から開始するので注意してください。
value
属性でセルの値にアクセスできるので、これで値の読み取りや変更を行います。
★ポイント4
A1形式の場合、worksheet['A1']
でセルを選択します。値の参照、変更はR1C1形式と同様にvalue
属性を利用します。
(書式フォーマットに関する注意)
テンプレートファイルで書式フォーマットを設定している場合、number_format
で値を設定する前にフォーマットを取得して、値を設定した後、事前に取得したフォーマットをnumber_format
で再設定してください。
自分の環境では再設定しないとテンプレートで設定したフォーマットが反映されませんでした。
★ポイント5
最後にworkbook.save()
でファイルに書き込みます。
引数には保存する際のファイル名を指定します。
3. さいごに
今回はoepnpyxlを利用して、事前に用意したExcelテンプレートファイルからExcel帳票を作成する方法について説明しました。
もともとxlsxwriterだとExcelファイルの読み込みができないことが今回の記事の始まりでした。xlsxwriterの機能をしっかりと調査していれば、読み込みも書き込みも可能なoepnpyxlを最初から利用していたと思います。
今後ライブラリを選定する際は、利用可能な機能を事前にしっかりと調査していきたいと思います。