脱エクセルを目指している職場もありますが、まだまだ現役バリバリのエクセル。今回はPythonでExcelデータを読み書き操作する方法を解説します。非エンジニアの会社員で業務改善の一環でプログラミングを勉強中の人を読者に想定しています。
目次
PythonでExcelデータを操作する方法
PythonはExcelのデータを操作する事ができます。まずExcelデータを操作するのにPythonを使う事のメリットを確認した後、具体的な方法について解説します。
PythonでExcelデータを操作するメリット
Excelを操作すると言えば、Excel VBAがまず思い浮かびます。VBAではエクセルブックの中に格納されているデータやエクセルアプリケーションを動かす事ができます。しかし、エクセルアプリケーションを開かないと何もできないというデメリットがあります。つまり、VBAでエクセルのデータを触ろうとすると、Excelというアプリそのものを開き、Excelのブックを開いて、それからようやく中身が触れるというわけです。
一方、Pythonでエクセルのデータを操作するモジュールを使うと、エクセルのブックを開くことなく、その中身のデータを操作する事ができます。目で見て操作する必要がないのであればエクセルブックの中身だけ触ればいいですよね。エクセルはブックを開くところが結構重い動作なので、エクセルブックの中身だけ書き換える時に動作が素早いというメリットがあります。
具体的な方法
Pythonでエクセルの中身を触ることのメリットが分かったところで、具体的に方法を見て行きます。
openpyxlモジュールをインポートする
openpyxlというサードパーティモジュールを利用します。そのため、あらかじめコマンドラインでインストールしておきましょう。
pip install openpyxl
これでopenpyxlを使う準備ができたので、スクリプトを作成していきます。
import openpyxl as xl
asはエイリアスと言います。この一文はopenpyxlというモジュールをインポートして、今後、このスクリプト内では openpyxlのことをxlと呼びますよ、と言う意味です。
WorkbookからSheetを取得する
今回は、スクリプトが書かれた.pyファイルがあるのと同じフォルダに「sample_format.xlsx」というエクセルブックが存在し、その中に「Data」という名前シートがあるとします。
import openpyxl as xl wb = xl.load_workbook('sample_format.xlsx') ws = wb['Data']
Pythonは変数のデータの宣言はなく、始めて使った時にその変数の型が決まるという言語仕様です。今回はwbにエクセルのワークブック、wsにそのエクセルブックのなかにあるシートを格納しています。こういう風に書くんだーと思ってもらえればと思います。
Cellオブジェクトとcellメソッド
Pythonで使うopenpyxlモジュールには、Cellオブジェクトとcellメソッドが存在します*1。
Cellオブジェクトはrow、column、valueというプロパティを持っています。rowはエクセルの行番号。columnは列番号です。valueはセルの持っている値です。このCellオブジェクトのvalueプロパティに値を書き込むのがcellメソッドです。cellメソッドが分かったところで、具体的にセルに値を書き込む処理を追記してみます。
cellメソッドを使って値を書き込む
import openpyxl as xl wb = xl.load_workbook('sample_format.xlsx') ws = wb['Data'] ws.cell(1, 1 , 'hello') ws.cell(2, 3 , 'world!') ws.cell(3, 5, '世界の皆さん') ws.cell(4, 9, 'こんにちは!') wb.save('sample_format2.xlsx')
cellメソッドの3つの引数に、行番号、列番号、入力したい値を指定しています。
実行すると下記のようになりました。
ちなみに、元データであるsample_format.xlsxは何もも変更がありませんでした。
これは、Pythonではなく、エクセルの解説となってしまいますが、重要なので述べます。元データを開いて、そこに値を書き込むように見えています。しかし、ファイルの実態が決まるのは保存された瞬間です。今回は、ファイルに別名をつけて保存したので、その変更された内容は名前をつけて保存した新しい方のファイルに反映されており、元データの方は影響を受けません。違和感があるかも知れませんが、エクセルは、名前が確定されるまで保存されない、と覚えておけば良いでしょう。
エクセルの値を読み込む
次にエクセルの値を読み込みます。cellメソッドのvalueプロパティを取得します。ここまでで作ってきたプログラムコードのwb.save('sample_format2.xlsx')の直前に、下の2行を追加します。
greeting_str = ws.cell(1, 1).value + ws.cell(2, 3).value print(greeting_str)
(1,1)セルの値と(2,2)セルの値を結合したものを一旦greeting_strという変数に入れてからコマンドラインに表示させています。これを実行した結果、コマンドラインにhelloworld!が表示されました。
データが書き込めてm読み取れるということは、ルールベースエクセル操作はPythonでも可能と言うことですね。大量のエクセルファイルを処理するなどの時は力を発揮するでしょう。うまくVBAと使い分けて業務改善につなげていきましょう!
<関連記事>
*1:VBAではCellはオブジェクトではありません。Sheetの中の位置を示すプロパティです。VBAができる人は混同しないようにしましょう