Python

PythonのOpenPyXLでExcel操る7つの技【読み書き・装飾・グラフ】

2021年1月5日

はじめに

データ分析や機械学習の分野で何かと便利なPython言語。

エンジニアは何かのデータを加工する時にもプログラミングを行いますが、
実際に結果を誰かに見せる時にはExcelなどを使って整形・グラフ化し、顧客や上司に報告します。

SANACHAN
SANACHAN
Pythonでデータ加工するついでに、レポート用の Excel を作成できたら便利ですね。

 

本記事では、Python の OpenPyXL を使って Excel を操作する基礎的な7つの技を説明していきます。

こんな方におすすめ

  • Pythonを使ってExcelを操作したいけど、やり方が分からない
  • PythonのOpenPyXLを使ってどんなことが出来るのかを知りたい

 

語句説明

OpenPyXL とは?

OpenPyXL の公式ページでは、以下のように記載されています。

openpyxl is a Python library to read/write Excel 2010 xlsx/xlsm/xltx/xltm files.
It was born from lack of existing library to read/write natively from Python the Office Open XML format.
All kudos to the PHPExcel team as openpyxl was initially based on PHPExcel.

1行目の英文がそのままの説明で、Pythonで Excel 2010(.xlsx)の読み書きをするためのライブラリです。

SANACHAN
SANACHAN
Excel 作業の自動化や、データ分析などをPythonで行った結果を Excel に出力することなどが容易にできるライブラリです。

 

準備:開発環境とデータ

Python開発環境

今回はWindows上で、VS Code を使ったPython実行環境を使っています。ターミナル(プロンプト)から Python を実行できる環境がある方は、それでも問題ありません。

OS Windows10 Pro [20H2]
エディター・ターミナル Visual Studio Code v1.52.1
Python 3.7.4
numpy 1.19.4
pandas 1.2.0
openpyxl 3.0.5
SANACHAN
SANACHAN
Pythonを実行した際に「ModuleNotFoundError: No module named 'openpyxl'」というエラーが出た場合は、「pip install openpyxl」を実行してインストールしましょう。

 

解析用データ

国税調査結果 - 男女別人口」からデータをダウンロードして加工しています。
必要な方は、加工後のデータを以下からダウンロードください。

c02.csv (2000年代の近畿地方の実行推移データ)

c02.csv (2000年代の近畿地方の実行推移データ)

 

本記事では、解析用データと実行するPythonスクリプトを以下のような配置で説明しています。
必要に応じて、適宜読み替えてください。

 ファイルの配置
(任意のディレクトリ)/
|- c02.csv
|- (実行するPythonスクリプト)

 

技①:Excelの書き込み

まずは、Pythonのopenpyxlを使ってExcelを出力できるのかを確認しましょう。

Pythonスクリプト

Pythonスクリプトの解説

  1. 1行目は、Pythonライブラリの openpyxl を読み込んでいます。
  2. 2行目は、openpyxl の新規のワークブックを作成する Workbook() を使用し、
    変数 wb へ格納しています。
  3. 3行目は、シートを作成し、変数 ws へ格納しています。
    ハッシュテーブルに任意の文字でアクセスするだけで空のシートが作成されます。
  4. 4行目は、ワークシートのセル(1, 1)、つまりA1セルに文字列をセットしています。
    セルを openpyxl のcell()で指定し、値の設定は、value プロパティを使って行います。
  5. 5行目は、openpyxl のsave() を使って、作成したワークブックを指定したファイル名で保存しています。
  6. 6行目は、openpyxl のclose() を使って、ワークブックを閉じています。
SANACHAN
SANACHAN
openpyxl のインターフェイスは、Excel VBA とよく似ていますね。

 

Pythonスクリプト実行結果

Excelなので画像の貼り付けになります。
Excelファイルが作成され、Sheet の A1セルに指定文字「私はSANACHANです。」が入っていますね。

write_test.py実行結果

write_test.pyで生成されたExcelファイル

 

技②:Excelの読み込み

次は、Excelファイルを読み込んで、セルの内容を表示する例です。

Pythonスクリプト

Pythonスクリプトの解説

  1. 1行目は、Pythonライブラリの openpyxl を読み込んでいます。
  2. 2行目は、openpyxlload_workbook() を使って Excel ファイルを読み込みます。
    今回は書き込みを行わないため、read_only のオプションを付与。
  3. 3行目は、Excel シート「Sheet」のオブジェクトを ws に格納しています。
  4. 4行目は、openpyxlcell() を使って、(1, 1) セル、つまり A1 セルの値 value を表示しています。
  5. 5行目は、使用したワークブックを close() で閉じています。

 

Pythonスクリプト実行結果

SANACHAN
SANACHAN
日本語も問題なく読み出せていますね。

 

技③:データ分析した結果をExcelに出力

Pythonから openpyxl を使って Excel ファイルに読み書きできることが分かりました。
せっかくですので、以下の基礎⑤で集計したデータを使ってExcelに出力してみましょう。

Pythonスクリプト

Pythonスクリプトの解説

  1. 1~9行目は、これまでに出てきた内容ですので省略します。
  2. 10~15行目で、出力するデータの行名、列名を出力しています。
    行名は index、列名は columns にリストで pandas データフレームに保存されています。
  3. 16~20行目で、集計したデータを出力しています。
    pandas データフレームの at() を使って値を取得し、セルに書き込んでいます。
  4. 21~23行目は、Excel ワークブックの終了処理です。
  5. 出力された Excel ファイルの内容と、集計したデータを比較するために画面に表示します。

ポイント

Python 配列の要素番号は 0 から始まります。対して、Excel のセル番号は 1 から始まります。
また、Excel の A1 セルを空白にするため、(1+1)を加算して cell() で場所を指定します。

 

Pythonスクリプトの実行結果

output_data.pyが生成したExcelの内容

output_data.pyが生成したExcelの内容

SANACHAN
SANACHAN
実質10行に満たないPythonのソースコードで、集計したデータをExcelに出力できました。

 

技④:Excel表の罫線を設定

さて、ここからは少しExcelのスタイル・整形に関する処理をみていきます。
Python の openpyxl で表計算ソフト Excel の罫線を引く方法です。

Pythonスクリプト

Pythonスクリプトの解説

  1. 1~5行目は、先に解説した内容ですので割愛します。
    3行目では、スタイル設定に必要なクラスを openpyxl からインポートしています。
    技③で生成したExcelファイルを読み込みます。
  2. 6~8行目で、罫線の幅と色、そして上下左右のどこに罫線を引くかを定義しています。
    Side(罫線の幅、色)と Border(罫線を引く)クラスを使ってオブジェクトを生成します。
  3. 9~12行目で、値が設定されている各セルに罫線を引いています。
    今回は、イテレーティブな記述をして、coordicate を使ってセルを指定しています。
  4. 13~15行目は、Excel の上書き保存、終了処理です。

 

Pythonスクリプトの実行結果

Excelなので画像の貼り付けになります。
値の入っているセルの罫線が Side で指定した赤色(RGB=FF0000)で反映されていますね。

罫線の設定

set_border.pyの実行結果

 

技⑤:セルの文字をボールド・色を設定

Excelを使用しているときも、表の行列名を太字にしたり文字色を変えて目立たせます。
Python の openpyxl を使っても、同じことができます。

Pythonスクリプト

Pythonのスクリプト解説

このスクリプトの肝は、9行目です。
Font クラスを使って、文字の装飾を指定します。
引数の bold=True で太字、color='RGB' で色のRGB値を指定します。

 

Pythonスクリプトの実行結果

Excelなので画像の貼り付けになります。
値の入っているセルの文字装飾が Font で指定した太字、赤色(RGB=FF0000)が反映されていますね。

フォントスタイルの設定

set_font_style.pyの実行結果

SANACHAN
SANACHAN
ちょっと赤々して目が痛いですが、簡単に文字装飾を設定できました。

 

技⑥:セルに数式を設定

Excel でよく使用する数式。もちろん、openpyxl でもセルに数式を設定することが可能です。
Excel と違って、入力補完や関数の説明は出ませんので、関数を事前に調べておく必要はあります。

Pythonスクリプト

Pythonスクリプトの解説

今回の肝は5行目です。近畿における2000年の人口合計を計算します。
設定方法は簡単で、値を設定してい value に数式の文字列を設定します。

SANACHAN
SANACHAN
今回は、max_row を使って最終行を取得する小技を使っています。

 

Pythonスクリプトの実行結果

Excelなので画像の貼り付けになります。
指定したセルに数式が入っており、2000年の総人口が値として見えていますね。

数式の利用

use_function.pyの実行結果

 

技⑦:折れ線グラフの作成と挿入

最後はExcelにグラフの挿入する方法です。
数値を表形式で入力・集計し、最後にグラフにして可視化する。Excelで最も一般的な使い方ですね。

Pythonスクリプト

Pythonスクリプトの解説

  1. 2行目で、グラフを挿入するためのクラスを openpyxl からインポートしています。
  2. 6~7行目で、折れ線グラフにするデータの範囲、折れ線のタイトルを指定しています。
  3. 9~16行目で、openpyxlLineChart() を使って折れ線グラフの設定を行っています。
    グラフタイトル、X軸・Y軸のタイトル、高さ・幅、グラフを挿入するセル番号などです。
SANACHAN
SANACHAN
折れ線グラフの他に、棒グラフ(BarChart)などもあります。

 

Pythonスクリプトの実行結果

Excelなので画像の貼り付けになります。
設定したデータ範囲が選択され、D10セルに折れ線グラフが挿入されていることが分かります。

折れ線グラフ

line_chart.pyの実行結果

 

おわりに

いかがでしたでしょうか。

Python と Excel を使う作業や業務の方は、openpyxl を使って Excel を使用する作業を自動化し、
生産性を上げる工夫ができそうです。

以上、「PythonのOpenPyXLでExcel操る7つの技【グラフ出力まで】」でした。

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-Python
-, , ,