PythonでExcelを自動化すると便利! Excelの読込・書込の基本操作紹介

こんにちは。ぐっさんです。
 
今もなお、業務では欠かせないExcelですが、テンプレートを各プロジェクトに配布して、サマリのエクセルを作りたい時など、結構困ってます。
 
VBAで集計してもよいのですが、せっかくなのでPythonを使って集計してみようと思ったら、思いのほか簡単にできそうなので、紹介します。

まずは準備

Pythonのインストールについては、今回は、割愛しますが、下記の記事が参考になると思います。
ビッグデータを使って統計分析がしたい! 【準備編】
 
記事では「ANACONDA」をインストールの例にしていますが、こちらでPythonをインストールでも問題ありません。
 
Pythonを少しだけ知りたい方は、こちらがおすすめです。
入門しない程度にさわってみる、ゆるふわPython講座
 
今回は、外部ライブラリのopenpyxlを使います。openpyxlを検索してみるといろいろなサイトでも紹介されており、情報も多いので、おすすめです。openpyxlのインストールは、コマンドプロンプトで下記を実行するとインストールできます。

pip install openpyxl

Excelにアクセスしてみる

まずは、準備でインストールしたopenpyxlをimportします。

import openpyxl

 
続いて、エクセルを読み込んでシートを選択します。
ここでは、プログラムと同じフォルダに「SampleExcel.xlsx」というファイルが存在することを想定してます。
wb = openpyxl.load_workbook('./SampleExcel.xlsx')
sheet = wb['Sheet1']

 
処理の終了時は、ファイルを閉じます。
wb.close()

Excelに保存されている値を読み込んでみる

Excelへのアクセスはできたので、Excelに保存している値を読み込んでみます。
値を読み込むには、Excelにアクセスし時に作成したsheetに対してアクセスします。

excelValue = sheet.cell(row=1, column=1).value

行と列は、1から始まり(row=1, column=1)で、A1のセルを指します。
 
下記の指定方法もできます。
excelValue = sheet['A1'].value

Excelに書き込んでみる

次に書込みになります。読み込んだ際と同様にシートに対して、値を設定することで、Excelに書込みができます。書き込んだら、保存を忘れないようにしましょう。

sheet.cell(row=1, column=1).value = excelValue
wb.save('./SampleExcel.xlsx')

これらをまとめて実行すると

今までの内容をまとめると下記のようなプログラムになります。Excelの値を読み込んで、すでに入力されている数字に対して1を足して書き込みます。下記の内容を、「sample.py」と保存しておきます。

import openpyxl

wb = openpyxl.load_workbook('./SampleExcel.xlsx')
sheet = wb['Sheet1']
excelValue = sheet.cell(row=1, column=1).value
excelValue = excelValue + 1
sheet.cell(row=1, column=1).value = excelValue
wb.save('./SampleExcel.xlsx')
wb.close()

 
実行する際は、コマンドプロンプトで下記のように実行します。
py sample.py

 
保存する際は、UTF-8で保存しましょう。ファイル名に日本語が含まれる場合など、下記のエラーが発生します。

SyntaxError: Non-UTF-8 code starting with ‘\x83’ in file C:\****\sample.py on line 3, but no encoding declared; see https://python.org/dev/peps/pep-0263/ for details

 
Excelが開いていると、下記のエラーが出るので、閉じてから実行しましょう。

PermissionError: [Errno 13] Permission denied: ‘./SampleExcel.xlsx’

 
SampleExcel.xlsxのA1セルに0を入力しておきます。A1に数字以外の値が入っていると、下記のエラーが発生します。

TypeError: unsupported operand type(s) for +: ‘NoneType’ and ‘int’

まとめ

ここまでできたら、もうこっちのものですね。Pythonの条件文や繰り返し文をもとに、集計や検索をして、使い放題です。
 
プログラマーにとっては、勉強にもなるので、いろいろと試してみるといいと思います。Pythonを使ってもう少し深いところについては、次の機会に。
 
それでは、良いPythonライフを!
 
 
 
 
《関連記事》

記事をシェア
MOST VIEWED ARTICLES