Excelは業務上の様々なデータを管理するのに欠かせない存在だ。そのため、Pythonを使って操作を自動化できると便利なことが多い。今回は、PythonからExcelファイルを作成する方法を紹介する。日本中で新年号「令和」が話題になっているので、Excelファイル作成の例題として和暦西暦の対応表を作ってみよう。

Excelライブラリの『openpyxl』をインストールしよう

ただし、Python自体には、Excelファイルの読み書き機能は搭載されていない。しかし、拡張ライブラリをインストールすることで、読み書きできるようになる。

Windows環境にAnacondaをインストールしているなら、Windowsのスタートメニューより「Anaconda3 > Anaconda Prompt」を起動しよう。macOSなら『標準のターミナル.app』を開いて以下のコマンドを入力して、openpyxlライブラリをインストールしよう。

pip install openpyxl

ちなみに、本連載の36回目では、openpyxlのインストールから基本的な使い方までを紹介しているので、こちらを参考にしてみて欲しい。

西暦和暦をどうやって変換するのか

次に、西暦と和暦の変換の方法も確認しておこう。西暦と和暦の間には、一定の規則があるわけではない。そのため、あらかじめ変換表を用意しておいて、その変換表を参照して、西暦から和暦へ変換するのが一般的だ。

Pythonのリストと辞書を使って西暦と和暦の変換表を表現すると、以下のようになるだろう。これは、JSONデータとしても利用できるため、Pythonだけでなく、JavaScriptからも使えるものだ。

wareki_table = [
  {"name": "明治", "start": 1868, "end": 1912},
  {"name": "大正", "start": 1912, "end": 1926},
  {"name": "昭和", "start": 1926, "end": 1989},
  {"name": "平成", "start": 1989, "end": 2019},
  {"name": "令和", "start": 2019, "end": 9999}
]

西暦和暦の対応表を作るのに際して、最初に、西暦から和暦へ変換する関数を定義してみよう。以下のプログラムを「wareki.py」という名前で保存しよう。

# 西暦と和暦の対応テーブル --- (*1)
wareki_table = [
    {"name": "明治", "start": 1868, "end": 1912},
    {"name": "大正", "start": 1912, "end": 1926},
    {"name": "昭和", "start": 1926, "end": 1989},
    {"name": "平成", "start": 1989, "end": 2019},
    {"name": "令和", "start": 2019, "end": 9999}
]

# 西暦から和暦へ変換する関数を定義 --- (*2)
def seireki_wareki(year):
    for w in wareki_table:
        if w["start"] <= year < w["end"]:
            y = str(year - w["start"] + 1) + "年"
            if y == "1年": y = "元年"
            return w["name"] + y
    return "不明"

# 関数のテスト --- (*3)
if __name__ == "__main__":
    print(2018, "=", seireki_wareki(2018))
    print(2019, "=", seireki_wareki(2019))
    print(2020, "=", seireki_wareki(2020))

そして、コマンドラインで『python wareki.py』を実行してみよう。すると、以下のように実行結果が表示される。

2018 = 平成30年
2019 = 令和元年
2020 = 令和2年

プログラムを確認しよう。プログラムの(*1)の部分では、西暦と和暦の対応表を定義している。そして、(*2)では、対応表を用いて、西暦から和暦への変換作業を行う。方法は単純で、和暦表の各列にある開始年(start)と終了年(end)を確認して、その和暦内であれば、何年目に当たるのかを計算して、和暦の名前と何年目かをくっつけて返すというものだ。(*3)の部分は、実際に関数を実行して正しい値が得られるかを確認するコードとなっている。

なお、和暦と西暦の変換に関する計算式については、こちらで詳しく説明しているので、気になる人は確認してみると良いだろう。

準備は整った、いざExcelで対応表を作ろう

それでは、Excelで西暦と和暦の対応表100年分を作ってみよう。以下のプログラムを「make_wareki_list.py」という名前で保存しよう。なお、このプログラムでは、上記で作成した「wareki.py」をモジュールとして使うので、二つのPythonファイルを一つのフォルダに保存しよう。

# ライブラリの取り込み --- (*1)
import wareki
import openpyxl as excel

# 新規ワークブックを作ってシートを得る --- (*2)
wb = excel.Workbook()
ws = wb.active
# 100年分の西暦和暦の対応表を作る --- (*3)
ws["A1"] = "西暦"
ws["B1"] = "和暦"
start_y = 1930
for i in range(100):
    sei = start_y + i
    wa = wareki.seireki_wareki(sei)
    ws.cell(column=1, row=(2+i), value=str(sei)+"年")
    ws.cell(column=2, row=(2+i), value=wa)
    print(sei, "=", wa)
# ファイルを保存 --- (*4)
wb.save("wareki.xlsx")

プログラムを実行するには、コマンドラインで「python make_wareki_list.py」を実行しよう。すると、以下のようなExcelファイルが作成される。

  • プログラムを実行したところ

    プログラムを実行したところ

プログラムを確認してみよう。(*1)の部分では、先ほど作成した「wareki.py」をモジュールとしてりようすべくimportで取り込みを行っている。また、Excelの読み書きを行うためにopenpyxlも取り込んでいる。(*2)の部分では、新規ワークブックを作ってアクティブなワークシートを得る。そして、(*3)の部分で100年分の西暦和暦の表を作成する。ここでは、for文を利用して、0から99まで繰り返し書き込みを実行する。cellメソッドを使うことで、指定の列(column)と行(row)に値(value)を書き込める。

まとめ

以上、今回は、Pythonで西暦和暦変換を行う方法、および、Excelファイルで和暦対応表を自動作成する方法を紹介した。今回、Excelで対応表を出力したが、Excelであれば、フォントを変更したり、飾り枠を細かく指定したりと、見栄えの良い対応表を作って印刷することができる。目の前に対応表があると便利な場面は多い。PythonとExcelを組み合わせると、業務自動化の幅がぐっと広がるので参考にしよう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。