PythonからExcelを読み書きするために使われる代表的な外部ライブラリであるopenpyxlを使用してExcelファイルの読み書き方法を具体例をつけて備忘録として残しておきます。
ここでは、読み込み方法について記載します。
目次
はじめにopenpyxlのインストール方法は以下のようになります。
openpyxlのインストール
インストール py -m pip install openpyxl
次に、Pythonからこのopenpyxlを使った読み込みプログラムの例を挙げたいと思います。
対象Excelファイルと処理内容
対象となるExcelファイルは以下のような簡単なものとします。
c:\abc.xlsx
選択 | 名前 | 得点 |
---|---|---|
鈴木 | 80 | |
○ | 田中 | 70 |
高橋 | 90 | |
佐藤 | 50 |
シート名:'def'
ここで、処理する内容としては、
Excelファイル(c:\abc.xlsx)のシート名('def')の1列目に〇がついている行番号を取得(1つ目の○の行番号取得)
とします。
プログラム例1(Excel表内行番号取得)
この処理を行うプログラムの例としては以下のようになります。
excelreadwrite1.py
import openpyxl ###wb = openpyxl.load_workbook(ファイル名) wb = openpyxl.load_workbook(r"C:\abc.xlsx") ###ws = wb[シート名] ws = wb["def"] #xの値でループ(xの値を1から最大行番号までループ) for x in range(1, ws.max_row ): #1列目を順に見ていきセルの値が"○"であれば、 if ws.cell(x,1).value == "○": #"○"がついている行番号取得 r = x break
プログラムの説明
1行目の
import openpyxl
は、openpyxlのインポートになります。
それに続く、
###wb = openpyxl.load_workbook(ファイル名) wb = openpyxl.load_workbook(r"C:\abc.xlsx") ###ws = wb[シート名] ws = wb["def"]
で、wbという変数にExcelファイル(c:\abc.xlsx)を読み込み、wsにそのExcelファイル(c:\abc.xlsx)のシート名('def')のシートを読み込んでいます。
ファイル名指定でのカッコ内の先頭の"r"は、これがないとファイル指定時に"\"がエスケープシーメンスとみなされてエラーが出るため必要となります。
次に、
#xの値でループ(xの値を1から最大行番号までループ) for x in range(1, ws.max_row ):
では、for文の中で、xの値として、1から ws.max_rowまでループを回します。
ws.max_rowにはopenpyxlではwsシートの最大行番号が入っています。
それに続く、
#1列目を順に見ていきセルの値が"○"であれば、 if ws.cell(x,1).value == "○":
では、for文の中でxで行番号を変えながら1行目から最大行番号まで"○"が出てくるまでセルの値を見ていきます。
"○"の行が登場したら、その次の
#"○"がついている行番号取得 r = x break
で、そのx(行番号)を変数rに入れてbreakでfor文を抜けています。
これにより、プログラム終了後には、変数xには1列目に"○"がついている最初の行番号が入っています。
プログラム例2(Excel表内データ取得)
次に、Excelの表内の値を取得するためにこの中の後半を以下のようにちょっと変えてみます。
excelreadwrite2.py
import openpyxl ###wb = openpyxl.load_workbook(ファイル名) wb = openpyxl.load_workbook(r"C:\abc.xlsx") ###ws = wb[シート名] ws = wb["def"] #辞書型変数dict_text 宣言、初期化(要素としてキー'名前'、'得点'を持つ) dict_text = {"名前":"","得点":""} #xの値でループ(xの値を1から最大行番号までループ) for x in range(1, ws.max_row ): #1列目を順に見ていきセルの値が"○"であれば、 if ws.cell(x,1).value == "○": #"○"がついている行の名前と得点取得 dict_text["名前"]= ws.cell(x, 2).value dict_text["得点"]= ws.cell(x, 3).value break
プログラムの説明
wsへのシート名の設定までは一緒ですが、
その次の、
#辞書型変数dict_text 宣言、初期化(要素としてキー'名前'、'得点'を持つ) dict_text = {"名前":"","得点":""}
でキーとして'名前','得点'をもつ辞書型変数dict_textを宣言、初期化しています。
そして、if文の条件成立時の実行内容を
#"○"がついている行の名前と得点取得 dict_text["名前"]= ws.cell(x, 2).value dict_text["得点"]= ws.cell(x, 3).value break
と変更しています。
こうすることで、今度は1列目に"○"がついてる行が登場した時にその行の2列目のセルの内容をdict_textの'名前'キーの値に入れ,3列目のセルの内容を'得点'キーの値に入れています。
これにより、Pythonからopenpyxlを使用して、Excelファイルの該当するデータや行番号の読み込みができることになりますので、プログラムの内容を変更することで種々のデータなどの取得ができると思います。
関連記事:
【クローリング、スクレイピング】クローリング、スクレイピングとは、Web上のデータ取得、操作での参考書籍、サイト - Django Girls and Boys 備忘録
【Python】Excel読み書き用外部ライブラリopenpyxlのインストール手順 - Django Girls and Boys 備忘録
【Python】openpyxlを使用してのExcelファイルの読み込み方法(具体的な読み込み方法記載例) - Django Girls and Boys 備忘録
【Python】openpyxlを使用してのExcelファイルの読み書き方法(具体的な読み書き方法記載例) - Django Girls and Boys 備忘録
【Python Excelファイルの読み書き】PythonのダウンロードからExcelファイルの読み書きまで必要なものを一通り記載 - Django Girls and Boys 備忘録
【PythonによるExcelファイルの読み書き】PythonのダウンロードからExcelファイルの読み書きまでの一通りすべての方法 - Django Girls and Boys 備忘録
【TOEIC試験 おすすめ参考書、書籍】(勉強法) - Django Girls and Boys 備忘録
【iPhoneアプリ開発ツール】Xcode インストール手順 - Django Girls and Boys 備忘録
【iPhoneアプリ開発】Thread 1; breakpoint 1.1 が発生した時の対処方法 - Django Girls and Boys 備忘録