プログラミング勉強の備忘録

主にpythonやスマホアプリを作るためのプログラミングで勉強した内容を忘れないように記載していきます。

【Python】Excel操作 ファイルの読み込み

【はじめに】

今回は個人的にも使用機会の多いExcelの操作方法について残しておきます。
まずは、初歩としてエクセルの読み込み方法についてです。
Pythonからエクセルを操作する方法はいろいろあるようですが、今回はライブラリの「openpyxl」を使った方法になります。
PyCharm環境で実施した方法のメモです。

<実施環境>

  • PyCharm 2019.2 (日本語化済み)
  • Python 3.7.4
  • openpyxl 2.6.2
  • Excel 2019

PyCharmのインストールと日本語化の方法はこちらに残してあります。

【openpyxl の使い方】

<ライブラリのインストール>

はじめは、「openpyxl」のライブラリインストールです。
ライブラリをインストールしないと「openpyxl」は使用できないため注意が必要です。
Pythonファイルの作成方法はこちらを参照)
(1)PyCharmで「Alt」+「Ctrl」+「s」を押して設定画面を開く。
(2)「プロジェクト」>「プロジェクト・インタープリター」を選択。
f:id:chappy88:20190815164110p:plain
(3)「+」を選択。
f:id:chappy88:20190815164300p:plain
(4)「openpyxl」を検索し、インストール。
f:id:chappy88:20190815164938p:plain
(5)下記のように成功が出れば完了です。
f:id:chappy88:20190815165214p:plain

<ファイルの読み込み>

ファイルの読み込みとセルやシートの読み出し方法についてメモしておきます。
読み出しファイルは「テスト.xlsx」をPythonファイルと同じフォルダに保管しました。(テスト.xlsxの中身は適当です。)
まずは、今回残しておく処理の全文から。
各部分の詳細については後述してあります。

import openpyxl as xl

# ファイル名の記載
fname = 'テスト.xlsx'

# ブックを開く
book = xl.load_workbook(fname)

# シート名の取得
print('ーーシート名の取得ーー')
print(book.sheetnames)
print(type(book.sheetnames))
print('ーーーーーーーーーーーーーー')

#共通処理
sheet1 = book.active
sheet2 = book['Sheet2']

# 個別シート名の取得
print('ーーアクティブシート名の取得ーー')
print(sheet1.title)
print(sheet2.title)
print('ーーーーーーーーーーーーーー')

# 使用している最大の行・列の取得
print('ーー使用している最大の行・列の取得ーー')
print(sheet1.max_row)
print(sheet1.max_column)
print(sheet2.max_row)
print(sheet2.max_column)
print('ーーーーーーーーーーーーーー')

#セルの値取得
print('ーーセルの値取得ーー')
print(sheet1.cell(11,7).value)
print(sheet1.cell(row=4, column=2).value)
print(sheet1['C1'].value)
print('ーーーーーーーーーーーーーー')

# シートの全セル値の取得
# 行毎に取得
print('ーー行毎に取得ーー')
for row in sheet1.rows:
    print('ーーーーーーーーーーーーーー')
    for cell in row:
        print(cell.value)
print('ーーーーーーーーーーーーーー')

# 列毎に取得
print('ーー列毎に取得ーー')
for column in sheet1.columns:
    print('ーーーーーーーーーーーーーー')
    for cell in column:
        print(cell.value)
print('ーーーーーーーーーーーーーー')

<処理の詳細>

「openpyxl」のインポートとファイルの読み込み
import openpyxl as xl

# ファイル名の記載
fname = 'テスト.xlsx'

# ブックを開く
book = xl.load_workbook(fname)

 「openpyxl」を インポートすることでこのファイルで使用できるようにしています。ここでは「xl」とすることで使用する際に記述を簡単にしています。
 「fname」は開くファイルの名前を記載するために準備しました。絶対パスを含めて書くことで、同じフォルダにファイルがなくても処理ができます。
 「xl.load_workbook(fname)」でファイルを読み込み、そのデータを「book」に入れています。「book」にはエクセルワークブックのデータ全体が入っているイメージです。
ここでの処理はこの後の処理を行う際には必ず必要な処理です。

シート名の取得
# シート名の取得
print(book.sheetnames)

 「.sheetnames」でシート名を取得することができます。
 取得したシート名はリスト型になっています。

#共通処理
sheet1 = book.active
sheet2 = book['Sheet2']

# 個別シート名の取得
print(sheet1.title)
print(sheet2.title)

 今回はエクセルブック上に「Sheet1」と「Sheet2」があり、アクティブなシートは「Sheet1」です。
 「.active」で現在のシートのデータ、「['Sheet2']」の様にシート名を記載することでそのシートのデータになり、共通処理でそのデータを「sheet1」、「sheet2」に入れています。
 「.title」でそのシートのシート名を取得できます。

使用セル範囲の取得
# 使用している最大の行・列の取得
print(sheet1.max_row)
print(sheet1.max_column)
print(sheet2.max_row)
print(sheet2.max_column)

 「.max_row」でシートの使用している最終行、「.max_column」で最終列を取得することができます。

セルの値の取得
#セルの値取得
print(sheet1.cell(11,7).value)
print(sheet1.cell(row=4, column=2).value)
print(sheet1['C1'].value)

 セルの値取得は、行列を数値で指定する方法と「C1」の様に指定する方法がありました。セルを指定して、「.value」をつけることで値を取得できます。(余談ですがVBAでは指定がない場合は「.value」が補完されるのですがPythonでは補完されないため、VBAになれている方は注意が必要です。)

全セル値の取得
# シートの全セル値の取得
# 行毎に取得
for row in sheet1.rows:
    for cell in row:
        print(cell.value)

# 列毎に取得
for column in sheet1.columns:
    for cell in column:
        print(cell.value)

 「.row」では行毎のデータが格納されているイメージで「.column」では列毎のデータが格納されているイメージです。その中のセルのデータを順番に取得することで全セルのデータを取得しています。

【後書き】

 今回は、「openpyxl」のインストールとエクセルの読み込み方法について記載しました。他にも取得な必要なデータはあると思いますので、それは必要になった際に残していきたいと思います。

【参考サイト】

今回の作業にあたり、下記サイトを参考にさせて頂きました。
www.python-izm.com
qiita.com