Pythonでexcel書き込み・読み込みをする方法の備忘録【openpyxl】

Pythonでexcel書き込みをしてみる

  • Pythonを使ってexcel書き込み・読み込みって簡単にできるの?
  • openpyxlは使ったことあるけど使い方をすぐ忘れちゃうんだよなー

こんな悩みを解消します

とっても便利なexcelですが、Pythonの”openpyxl”を使って書き込み・読み込みができるようになれば、もっと便利に使うことができます。

この記事でわかること
  • Pythonを使ったことが無い人は、単純なexcel操作をPythonで書いた場合にどんな感じかイメージを持てるようになります「意外と簡単!」ということが伝えることを目標としています
  • すでにopenpyxlを使ったことがある人は、操作方法の備忘録として参照できます

excelブック関連の操作

openpyxlを使ったexcelの操作について、ブック→シート→セルの順番で紹介していきます。まずはブックから。


ブックを開くパターンは、2パターンありますね。

  1. 新しくブックを作る
  2. 既存のブックを読み込む

新規作成する場合は、引数(カッコの中身)に何も指定する必要はありませんが、既存のブックを読み込む場合はブックのパスを記述します。
どちらのパターンで開いても、保存するときは/Users/hoge/Desktop/test.xlsxこんな風にパスを指定しましょう。

注意
保存先として指定した作業フォルダに同じ名前のブックがあると上書きされてしまうので、ブック名はしっかり確認しましょう

エクセルシート関連の操作


ここからはもう少し丁寧に解説していきます。

シート名の取得


この記事では最終的にセルの読み込み・書き込みまで行いますが、処理対象となるセルを指定するためには、そのセルが属するシートを特定しなければなりません。
ここではsheetsという変数にシート名を格納しています。
sheetsを出力すると[“sheet1”, “sheet2”, “sheet3”] といったリストが返ってくるでしょう。
※デフォルトのシート枚数設定をいじっていたり、OSがMACだったりすると違ったリストが返ってくる

シート指定


sheetsにはリスト形式でシート名が格納されていました。書き込みたいセルが存在しているシートを特定していきます。
リスト形式で格納されているので、ここでは一番最初に格納されている”0″を指定して変数sheetに格納。

シート作成


新しくexcelシートを作成する場合は、シーの名前をtitle、シートの挿入位置をindexで指定します。
例えば、先頭に”first_sheet”という名称のシートを新規作成したければwb.create_sheet(“first_sheet”, 0)と記述すればOKですね。

シート削除


シートを削除したい場合は、このコードの引数に削除したいシートを指定します。上で新しく作ったシートを削除するのであればwb.remove(wb[“first_sheet”])ですね。

シート名変更


こちらはシンプルなので割愛。

シートタブの色変更


色指定については、基本的な色であれば英語で書けばOKですが、#000000のようなカラーコードで記述した方がより細かく指定できます。
参考 原色大辞典原色大辞典

セルの書き込み、読み込みに関する操作


ブック・シートの指定方法までまとめたので、最後にセルの書き込み・読み込みに関する操作を見ていきます。

セルを指定して書き込み


セルを指定するには上の2つの方法があります。記述の仕方は違っても、どちらも”A1″セルを指定しています。
2つ目の例は直感的にわかるとして、1つ目の例は行“row”“column”をそれぞれ指定することで、A1セルを特定しています。

どっちで書いた方がいいの?
初めから書き込みたいセルの番地が分かっていれば2でもいいですが、そうではないケースがほとんどです。変数を使ってセルの番地を指定する場合は1の方が書きやすい気がします。

セルの番地を取得


今度は逆に、変数に格納されているセルの番地を取得します。
2行目の結果を出力すると“A1”と出力されるでしょう。

最大行列を取得


あるシートに存在するセルの値を更新する場合、現在どの範囲にデータが存在するか知りたいというケースがよくあります。
excelマクロだと、色々制約があって長いコードになってしまうのですが、openpyxlならこれだけで最大行列を取得できます。

複数の行列を選択(範囲選択)


指定範囲のセルオブジェクトが、タプル形式で返ってきます。上の例でいうと((<cell sheet1.A1>,<cell sheet1.B1>,<cell sheet1.C1>,<cell sheet1.D1>),(<cell sheet1.A2>,….<cell sheet1.D4>))ですね。

セルの文字と番号を相互変換


エクセルを使っていると「K列って何列目だ??」なんて場面に遭遇しますよね。そんな場合はget_index_from_string()の引数にKを渡してあげれば11という結果が返ってきます。
get_column_letter()はその逆の場合に使えます。

openpyxlを使えばexcelの読み込み・書き込みを効率化しよう!

ここまでopenpyxlの基本操作を紹介してきましたが、あとは繰り返し処理(for文)くらい覚えればいつもやっているexcel操作はだいたいできるのではないでしょうか。
自分のPCでPythonを動かしてみたい方はこの本を参考にしてください。
株価の自動取得くらいはできるようになります。
Pythonを使ってRPAを自作で作ってみた 簡単なRPAを自作してみた【株価取得してエクセルに書き込み】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です