Python Openpyxl 1 インストールからセル操作まで

はじめに

多くの方がPCで使っているアプリといえばマイクロソフトエクセル。とてもメジャーなもので、お世話になっていらっしゃる方も多いと思います。 ですが、エクセルの本当の性能を引き出すために覚えなければならない技術が山ほどあって、ググる以外の方法でテクニックを学んでいる方もおおいのではないでしょうか?高機能を実現するためにはマクロ、VBAというものを学ぶ必要もあり、普及している割にエキスパートになるにはとても大変です。  

エクセルがPythonにすりよっている?

最近になって、マイクロソフト社がVBAとPythonを並列にサポートしようか?と社内アンケートを取っているそうです。 VBAというと基本的にはプログラムです。これでエクセルを自動的に操作させるものです。実はPyhtonはすでにVBAとほぼ同じ機能を実現することができるようになっているのです。それがPythonのモジュールOpenpyxlです。  

Openpyxlは絶対おすすめモジュールです

実は当社もかなりディープにOpenpyxlを導入していて、市販のRPAは使わずに、今までに行っていたエクセルを使った業務はほとんどRPA化しました。 Openpyxlのよいところは、Pythonの他のライブラリととても相性が良いということです。CSV、Pandas、Numpy…。エクセルがあまり得意ではないような計算をこういったライブラリで保管することもできます。  

Openpyxlのインストール

インストールはコマンドプロンプト(Macの場合はターミナルです)から以下のコマンド実行で可能です。

 

EXCELファイル読み込み

エクセルファイルをダウンロードしてください。 sample1.xlsx 以下のシートが生成されています。これを使って基本的な操作を学びましょう。

  a b c
data1 10 20 40
data2 400 800 1200
data3 3000 6000 9000

Pythonを起動して下さい。openpyxlをインポートします。

エクセルファイルをロード

openpyxl.load_workbook()コマンドを使いましょう。()内にダウンロードするエクセルファイルのパスとファイル名を入力します。今回はPythonの実行パスと同じディレクトリにこのエクセルを保存してください。wbというなのオブジェクトを生成します。type(オブジェクト名)でオブジェクトのクラス、ブジェクト名.sheetnamesでワークシート名を返します。  

以下の通り返ってくればOKです。エクセルファイルの読み込みに成功しました。1行目はファイルの型、二行目はファイルに含まれるシートを表示しています。

 

ワークシートを読み込む

次に以下のコマンドでwbオブジェクトからワークシートオブジェクトを取得しましょう。

以下の通り返ます。ワークシートですね。

 

セルを読み込む

次は、セルのデータを入手します。以下の通りコマンドを入力してください。sheetオブジェクトからセル’B3’を取得します。type(cell)でオブジェクトcellの型を返します。cell.valueで値を返します。

以下の通り表示されます。

ちなみにワークシートにはA1-D4までのセルにはデータがありますが、その外の範囲を読み込むとどうなるでしょうか?Z3セルを参照してみましょう。

すると以下の通り返ります。

Noneが返ってきます。  

セルにNoneを入れるとどうなる?

ちょっと意地悪なテストをしてみます。B2のセルにNoneと入力し、読み込んでみます。

なんと以下のように返ってきます。

空白のセルも、”None”と入力したセルも同じように帰ってきますね。 今後、空白データや欠損データ(NaN)を取り扱うことが多い方は注意が必要ですね。エクセルに”None”という 文字を使用しないほうがおすすめです。  

行番号、列番号を指定してセル情報を取得する

セル番号を指定するほかに、Row,Column番号を指定してセル情報を取得することも可能です。

‘data2’はエクセルのA3セルに入力されています。

Column=1がA3セルの”A” Row=3がA3セルの”3”を意味しています。 Openpyxlの場合、エクセルの行番号列番号にあわせて数字が1で始まっていますので、注意が必要です。

シートのデータを一覧で取得する

Python上でエクセルのデータを一括して入手したいときがありますよね。こういったときはlistコマンドでエクセルデータを二次元配列のリスト(リストのリスト)として入手できます。頭の3行は繰り返しの表示です。

すると以下のようにリストのリストが返ってきます。

んーちょっと見にくいですね。Numpyのように見やすい二次元配列表示にしたいですね。そこでpprintモジュールをインポートしましょう。

すると以下のように見やすく表示されます。

 

セルの編集

この機能が非常に重要です。セルを直接編集することができます。エクセルのセル指定文字列で指定したcellオブジェクトには新しい値を入力できます。ただし、変更内容を必ず保存する必要があります。

先ほどのコマンドでセル情報を一覧取得すると、

B2セルが修正されていることがわかりました。 このsaveコマンドはそのまま新規作成もできます。ファイル名が既存かそうでないかで新規作成か更新に自動的に切り替わります。  

まとめ

openpyxlを使ってpython上でエクセルを操作してきました。今回は基本的な操作ですが、pythonの操作と組み合わせると、かなりの作業をpython上で行うことができます。