こんにちは、挑戦するエンジニア のり ですよ。
事務処理にExcelを使われている方、多いのではないでしょうか?
そのExcelを使った作業を少しでも自動化できるとうれしいですよね。
今回は、そんな自動化への足掛かりとなる、Excelの読み書きに挑戦してみたいと思います。
目次
1.openpyxlのインストール
2.Excelのデータを読む!
3.式が書かれているセルの値の取得
4.Excelにデータを書く!
5.まとめ
1.openpyxlのインストール
まず、PythonでExcelを扱うために必要なライブラリ「openpyxl」をインストールします。
コマンドを発行する順は、pipコマンドのアップデート、openpyxlのインストールの順です。
pipコマンドをアップデートするコマンドをターミナルから入力します。
コマンド:python -m pip install –upgrade pip
メッセージが、黄色や赤色の文字で表示されていないのため成功です。
上のスクリーンショットでは、pipコマンドがすでに最新化されていたようです。
続けて、openpyxlをインストールするコマンドをターミナルから入力します。
コマンド:pip install openpyxl
openpyxlのインストールに成功しました。
ライブラリ「openpyxl」が使えるようになったので、さっそく使ってみたいと思います。
2.Excelのデータを読む!
まず、プログラムの先頭でopenpyxlをインポートします。
次に、変数にExcelファイルの名前を入れます。この時、フォルダ階層も含めて記載します。
続けて、ワークブックを開きロードします。
さらに、ワークブックの中から、先頭のワークシートを取り出します。
ワークシートのセルを指定して、コンソールに値を表示します。
使い終わったら、忘れずにロードしたワークブックを閉じます。
プログラムが書きあがったので、ターミナルで実行してみます。
実行は、Visual Studio Codeのエクスプローラーで拡張子「.py」のファイルを右クリック。
表示されたメニューから[ターミナルでPythonファイルを実行]を選択します。
プログラムの書き方に問題がなければ、実行結果が表示されます。
今回の実行結果では、式「=SUM(A1:A4)」もそのまま表示されています。
式が書かれているセルから計算後の値を取り出すには、少々工夫が必要なようです。
どんな工夫をすればよいか、次にみていきたいと思います。
3.式が書かれているセルの値の取得
式が書かれているセルの値をどのようにして取得すればよいのでしょうか。
答えはopenpyxlの公式リファレンスにありました。
openpyxlの公式リファレンス(load_workbook関数が記載されているページ)
https://openpyxl.readthedocs.io/en/stable/api/openpyxl.reader.excel.html
どうやらload_workbook関数を実行する際、引数にdata_only=trueを設定すればよいようです。
早速、引数にdata_only=trueを設定して、プログラムを実行してみます。
今度は式「=SUM(A1:A4)」ではなく、計算結果の値「70」が表示されました。
Excelデータを読むことが出来たので、次は書き込みに挑戦です。
4.Excelにデータを書く!
すでに開いているワークブックのワークシートのセルに値を入れて保存してみます。
セルB5に値「OK」をいれます。そして、ワークブックを閉じる前に保存します。
プログラムを実行してみたら、無事に動いたようです。
忘れずにOKが保存されているか、Excelも確認してみます。
意図したとおり、セルB5にOKが書き込まれています。
しかし、ほかの箇所も注意して見ておく必要がありました。
式「=SUM(A1:A4)」が入っていたセルA5です。
プログラム実行後、セルA5には値「70」が入っていました。
値「70」は、式「=SUM(A1:A4)」の計算結果です。
引数にdata_only=trueを設定したことが、裏目に出ました。
式が入っていたセルの値が、計算結果の値に置き換わってしまったようです。
これでは式の入ったExcelファイルを壊してしまいます。別途、解決策が必要なようです。
5.まとめ
さて、今回のおさらいです。
openpyxlをインストールして、Excelファイルを読み書きをしました。
load_workbook関数を使い、Excelファイルからデータ取り出すことに成功。
引数にdata_only=trueを設定することで式の計算後の値も取得できました。
続けて、引数にdata_only=trueを設定して開いたワークブックに、値を入れて保存しました。
しかし、そこで落とし穴がありました。
入れた値は保存されていましたが、式が入っていたセルも値になって保存されてしまったのです。
これは取り扱いに注意が必要なようです・・・。
それでは、今日の挑戦はこのへんで。
またのお越しをお待ちしております。
今回のプログラムソース
# ライブラリをインポートする
import openpyxl
# Excelファイル名(フルパス)
filename = “c:\Python\dat\worksheet01.xlsx”
# Excelファイル(ワークブック)を開く
wb = openpyxl.load_workbook(filename, data_only=True)
# 先頭のワークシートを取り出す
ws = wb.worksheets[0]
# セルから値を取り出して表示しします
print (ws[‘A1’].value)
print (ws[‘A2’].value)
print (ws[‘A3’].value)
print (ws[‘A4’].value)
print (ws[‘A5’].value)
# データの編集と保存
ws[‘B5’].value = “OK”
wb.save(filename)
# ワークブックを閉じる
wb.close
※このプログラムは、書き込み方に失敗しているので取り扱いにはご注意ください。