業務で欠かすことのできないアプリを3つ挙げてと言われて、真っ先に思いつくのは、MicrosoftのExcelではないだろうか。多くの企業でさまざまな表を作るのに使われている。今回は、PythonからExcelファイルを自動作成する方法を見てみよう。簡単な利用例として、9月はじまりの年間カレンダーを作ってみよう。

『openpyxl』をインストールしてみよう

Pythonの魅力の一つが、その豊富なライブラリにある。しかも、pipコマンドを利用して、手軽にライブラリをインストールできる。Excelファイルを操作するライブラリは、いくつかあるが、今回は『openpyxl』を使ってみよう。

【Windowsの場合】

Windows環境にAnacondaをインストールしているなら、Windowsのスタートメニューより「Anaconda3 > Anaconda Prompt」を起動しよう。コマンドラインに以下のコマンドを入力すると、openpyxlライブラリをインストールできる。

pip install openpyxl

【macOSの場合】

macOS環境では、ターミナル.appを起動して、以下のコマンドを実行しよう。

pip3 install openpyxl

Excelファイルのつくり方

最初に、新規Excelファイルを作成して、「こんにちは」とだけ書き込んでみよう。一番簡単なExcelファイル作成プログラムだ。以下のプログラムを「hello_excel.py」という名前で保存しよう。

# ライブラリを取り込む --- (*1)
import openpyxl as excel

# 新規ワークブックを作る --- (*2)
wb = excel.Workbook()
# アクティブなワークシートを得る --- (*3)
ws = wb.active
# A1のセルに値を設定 --- (*4)
ws["A1"] = "こんにちは"
# ファイルを保存 --- (*5)
wb.save("hello.xlsx")

このプログラムを実行するには、コマンドラインから以下のコマンドを実行しよう。

# Windowsの場合
python hello_excel.py



# macOSの場合
python3 hello_excel.py

すると、「hello.xlsx」という名前のExcelファイルが書き出される。そこで、Excelでこのファイルを開いて見ると、以下のように、A1セルに「こんにちは」と書き込まれているのを確認できるだろう。

  • 作成したExcelファイルを開いてみたところ

    作成したExcelファイルを開いてみたところ

プログラムの流れを確認してみよう。(*1)の部分では、openpyxlライブラリを取り込んで、excelという名前で利用できるように宣言している。そして、(*2)では新規ワークブックを作成する。(*3)ではワークブックからアクティブなワークシートを得る。そして、(*4)の部分で、ワークシートのA1セルに「こんにちは」という文字列を設定する。(*5)ではワークブックを「hello.xlsx」という名前で保存する。

これは、Excel VBAに詳しい方なら、「なるほど」と納得するプログラムになっている。Pythonを使っているとは言え、VBAのコードにも似ている部分がある。しかし、Excel VBAに詳しくない人も多いと思うので、もう少し詳しく紹介しよう。Excelでは一つのファイルの中に複数のワークシート(二次元の表)を作成することができる仕組みになっている。そして、一つのファイルをワークブックと呼んでいる。つまり、最初にワークブックを作成し、ワークブック内にあるどのワークシートを利用するかを選択する(この操作が上記の*3に当たる)。どのワークシートを操作するかを決めたなら、シート内の任意のセルに対して処理を行うことができるという訳だ。

任意のセルに値を設定する方法

ところで、先のプログラムでは、セルA1に値を代入したが、プログラミングでセルを指定する場合、行番号と列番号を指定できた方が便利な場面も多い。この場合、ワークシートのcell()メソッドを使うと行(row)と列(column)を指定して値(value)を指定できる。

簡単な例として掛け算(九九)の表を作ってみよう。以下のプログラムを「kuku.py」という名前で保存しよう。

import openpyxl as excel

# 新規ワークブックを作る
wb = excel.Workbook()
ws = wb.active

# 九九の表を作る
for i in range(1, 10):
    for j in range(1, 10):
        v = i * j
        ws.cell(column=j, row=i, value=v) # --- (*1)

wb.save("kuku.xlsx")

コマンドラインからプログラムを実行してみよう。

# Windowsの場合
python kuku.py



# macOSの場合
python3 kuku.py

正しく実行できると、「kuku.xlsx」というExcelファイルが出力される。Excelで開いて見ると、以下のようになる。確かに、正しい九九の表が作成された。

  • 九九の表を書き出したところ

    九九の表を書き出したところ

プログラムのポイントは、(*1)の部分だ。cell()メソッドを利用して、列・行・値を指定している。for構文を使って、各値を繰り返し書き込むことで、九九の表を作ることができる。

9月はじまりのカレンダーを作ってみよう

それでは、9月はじまりのカレンダーを作って、Excelファイルとして保存してみよう。以下のプログラムを「cal.py」という名前で保存しよう。

import openpyxl as excel
import datetime

# 曜日名の定義
weekname = ["月","火","水","木","金","土", "日"]

# 新規ワークブックを作る
wb = excel.Workbook()
ws = wb.active

# 今年の9月1日を得る --- (*1)
now = datetime.datetime.now()
tm = datetime.date(now.year, 9, 1)
# 366日分を繰り返してセルに書き込む --- (*2)
for i in range(1, 367):
    # 年月日と曜日を書き込む --- (*3)
    ws.cell(column=1, row=i, value=tm.year)
    ws.cell(column=2, row=i, value=tm.month)
    ws.cell(column=3, row=i, value=tm.day)
    ws.cell(column=4, row=i, value=weekname[tm.weekday()])
    # 翌日を得る --- (*4)
    tm = tm + datetime.timedelta(days=1)

wb.save("cal.xlsx")

次に、プログラムを実行しよう。コマンドラインより、以下のコマンドを実行しよう。

# Windowsの場合
python cal.py


# macOSの場合
python3 cal.py

すると、以下のように一年分のカレンダーを書き込んだ、Excelファイル「cal.xlsx」が出力される。これを、Excelで開くと、以下のようになっている。

  • 月はじまりのカレンダーを作成したところ

    9月はじまりのカレンダーを作成したところ

プログラムを確認してみよう。(*1)の部分では、今年の9月1日の日付を作成する。もし、任意の年を指定したい場合には、now.yearの部分を2019など任意の値をすれば良い。(*2)の部分では、for構文で1から366まで繰り返すように指定している。(*3)では、それぞれ、年月日と曜日をExcelのセルに書き込む。そして、(*4)の部分がカレンダーの肝なのだが、変数tmをその日付の1日後の値(つまり翌日)に書き換える。これを繰り返すことにより、一日ずつ日付をずらしながら、値を書き込んでいく。

まとめ

今回は、PythonでExecelファイルを自動作成する方法を紹介した。ここでは、ゼロから連続する値をExcelファイルに書き込む方法を紹介した。しかし、openpyxlライブラリを使うと、既存のExcelファイルを読み込んで値を書き換えるということもできる。業務での利用頻度も高いことを考えると、Pythonを使ってExcelの操作ができるのは便利なので、覚えておいて損はないだろう。

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