Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Python】Excelファイルの読み込み方法(openpyxl使用)

f:id:kuku81kuku81:20220227192211p:plain

 

PythonからExcelを読み書きするために使われる代表的な外部ライブラリであるopenpyxlを使用してExcelファイルの読み書き方法を具体例をつけて備忘録として残しておきます。

ここでは、読み込み方法について記載します。

 

目次

 

はじめにopenpyxlのインストール方法は以下のようになります。

 

openpyxlのインストール

 
コマンドプロンプトを開きます。
以下のコマンドを入力します。
 
インストール
py -m pip install openpyxl
 
これで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ファイルの該当するデータや行番号の読み込みができることになりますので、プログラムの内容を変更することで種々のデータなどの取得ができると思います。

 

 

 

 

関連記事:

【Python】openpyxlでExcelの最大行番号、最大列番号を取得する方法(End(xlUp).Row、End(xlToLeft).Columnに近い方法) - Django Girls and Boys 備忘録

 

【クローリング、スクレイピング】クローリング、スクレイピングとは、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 備忘録