「openpyxl」で売上データのExcelファイルからデータを取得してみよう

※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回は、セル番号と行列番号の変換について学びました。
今回から、Chapter2-6「Excelシートのデータ抽出テクニック」に入ります。

Excelファイルから売上データをすべて取り出してみる

前回まではExcelからのデータの取得方法を学んでいましたが、ここからはもう少し実践的な使い方を学ぶことになります。次の売上がまとめられたExcelデータを使って必要なデータを取り出してみます。

まずはワークシートから売上データをすべて取得する方法です。
データはA3からF9に保存されていますので、この範囲を指定してあげる必要があります。 まずはサンプルコードで確認してみます。


P.70


これを実行するとこんな形で結果が表示されます。

  • リスト内包表記を使わない方法

ところで、サンプルコードの2の辺り。

この部分は前々回のコラムで書いた「リスト内包表記」の手法を利用して、1行の中に含まれているデータを取り出しています。

リスト内包表記を使わない場合は、ここの部分を赤字のように変えてあげるそうです。

空のリストをvalues = []で作った後、for文を回して行内のセルの値を取得し、リストに順番に追加していくという方法です。
リスト内包表記を使うと1行で表現できるのでシンプルになっていいのですが、書き方を覚え、慣れるまでが大変ですね…。
書き方についてまとめられているページを見つけました。興味がある方はこちらもどうぞ。
【図解】リスト内包表記について

関数で書かれている部分を計算結果で取得できるようにしたい

Excelファイルを実際に見ると、F列には計算式(例:D3*E3)が入っています。計算結果で表示したいところですが、何も指定してあげなければ計算式がやっぱりそのまま表示されます。
そこで、[book = excel.load_workbook("uriage.xlsx")]のファイル名の部分を、[("uriage.xlsx",data_only = True)]と引数を追記して書き換えてあげることで、計算結果が表示されるようになるそうです。

[data_only=True]はExcelファイル内に保存された計算結果を取得するだけで、数式を再計算するものではないそうです。そのため、Excelで編集・保存した結果が反映されていなければ、最新の値は取得できないとのこと。また、Excelで一度も開いて保存されていないファイルでは、数式の結果が取得できず、Noneが返ってくることもあるそうです。もらったファイルの場合、一度はファイルを開いて保存しないと正しく読めないことがある、ということですね。

ところで、どうせなら日付もわかりやすいように変換して欲しい…と思うのですが、これについては、openpyxl自体はあくまでExcelの動作を模倣してくれるもので、すべての機能を使えるわけではないことが影響しているようです。例えば以前学習した和暦変換に対して[data_only = True]を入れてあげたところで、openpyxl自体が和暦変換機能をサポートしていないため、変換した状態で表示してくれるのではないのだとか。
ただ、Excel→openpyxlはNGだけれども、openpyxl→Excelで数式を埋め込むのならExcel側の制限はなく、表示してくれるようなので上手く使ってくださいねとのことでした。

それではきりが良いのでこちらで終了です。今回もお付き合いいただき、ありがとうございました。

Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。

Pythonによる業務の自動化ソリューション

このページではPythonを活用した業務の自動化ソリューションをご紹介します。 目次お客様の課題日本企業の雑務の平均時間は業務の自動化を採用するメリット当社のPythonに…