PythonでExcel操作（読み込み編）

# 経緯
自社でプログラミングに興味を持っているい人向けに
馴染みのあるExcelの操作で触れることができるように書いてみようと思いました！
※環境構築、外部ライブラリのインストールについては参考リンクのみで
　割愛させていただきます、、、
　[Python環境構築ガイド](https://www.python.jp/install/install.html)
　[初心者向けにPythonのインストールから環境構築、動作確認までの手順をまるっと解説！](https://camp.trainocate.co.jp/magazine/python-install/)
# 使用するモノ
・Excel
・openpyxl
　※PythonでExcelを読み書きするための外部ライブラリ
　　ただし、openpyxlモジュールは2010以降のExcelファイルを対象にしているため
　　Excel 97~2003ブック（拡張子が.xls）が利用できず、Excel 2007のブックは
　　正常に読み書きできない可能性があります。
・print関数
　※Excelで読み取ったデータ表示に使用します。
　　https://www.javadrive.jp/python/function/index1.html
# 環境
・Python 3.9
・Windows10
・フォルダ階層
```
execel-controller/
　├ excel_read.py
　└ Books/
　 　└ Book_read.xlsx
```
### 実行方法
今回はコマンドプロンプトで実行していきます。
```
cd C:\???\execel-controller
```
実行する際にはPythonファイルが置いてあるexecel-controllerフォルダに移動
```
python excel_read.py
```
コマンドプロンプトで実行する際は
「python [実行するpythonファイル名].py」
で実行できる。
今回は「excel_read.py」の中身を変更して実行していく。
# Book_read.xlsx
![スクリーンショット 2022-05-04 163923.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/cbb83961-f30e-3353-735d-ae997970c0fc.jpeg)
今回使用する「Book_read.xlsx」ブックです。
※内容に関しては適当に作成してしまったので適宜修正していきたいと思います。
### ブックの取得
はじめに読み取るExcel（※以降ブックとする）をPython内で変数に格納します。
1,openpyxlをimport
2,openpyxlのload_workbook()でExcelブックのパスを使って読み込む
3,読み込んだブックのシートを出力して確認
```Python:excel_read.py
# openpyxlをimport
import openpyxl

# ブックの取得
# ブックを変数に格納
wb = openpyxl.load_workbook("Books/Book_read.xlsx")
# Book内のシート名を表示「Sheet1」と表示される
print(wb.sheetnames)
```
「sheetnames」でブック内のシート名を表示させる。

実行結果
![スクリーンショット 2022-05-05 233305.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/5b14585a-1984-2e53-1943-2bbc52bcd2a1.jpeg)
シート名がリスト型で表示されます。
### シートの取得
```Python:excel_read.py
# openpyxlをimport
import openpyxl

# シートを取得
# ブックを変数に格納
wb = openpyxl.load_workbook("Books/Book_read.xlsx")
# シートを変数に名前で格納
ws = wb["Sheet1"]
# シートを変数にインデックス番号で格納
ws2 = wb.worksheets[0]
# シート名を表示どちらも同じシートを指定しているため
# 「Sheet1」と表示される
print(ws.title)
print(ws2.title)
```
シートの取得は2パターンあり、直接シート名を指定する方法と
インデックス番号（0から始まる）で取得することができる。

実行結果
![スクリーンショット 2022-05-05 234712.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/adb65bfc-7d76-72fa-b562-4a5f53e4e110.jpeg)
### セルの取得
```Python:excel_read.py
# openpyxlをimport
import openpyxl

# セルを取得
# ブックを変数に格納
wb = openpyxl.load_workbook("Books/Book_read.xlsx")
# シートを変数に名前で格納
ws = wb["Sheet1"]
# cはセル番地でA1のセルを取得する
c = ws["A1"]
# c2は行列番号でA1のセルを取得する
c2 = ws.cell(1, 1)
# coordinate「セル番地」
# row「行番号」
# column「列番号」
print(c.coordinate)
print(c2.coordinate)
print(c.row)
print(c2.row)
print(c.column)
print(c2.column)
```
セルの取得はセル番地、または行列番号で取得できます。
今回はセル番地「A1」を取得。
「coordinate」でセル番地
「row」で行番号
「column」で列番号を表示させます。

実行結果
![スクリーンショット 2022-05-05 235536.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/b13d87e4-d8d7-43a4-a08a-9c5425b1619a.jpeg)
### セルの値(中身)を取得
```Python:excel_read.py
# openpyxlをimport
import openpyxl

# セルの値(中身)を取得する
# ブックを変数に格納
wb = openpyxl.load_workbook("Books/Book_read.xlsx")
# シートを変数に名前で格納
ws = wb["Sheet1"]
# セルを取得する
c = ws["A1"]
c2 = ws["B1"]
c3 = ws["C1"]
c4 = ws["D1"]
# セルの値(中身)を表示
# ヘッダーの「ID」「名前」「性別」「年齢」が表示される
print(c.value)
print(c2.value)
print(c3.value)
print(c4.value)
```
取得したセルの値は「value」で取得することができる。
1行目のセルを取得して表示させる。

実行結果
![スクリーンショット 2022-05-06 001035.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/2e5b51f9-9140-d0f4-72d8-3ba7ef98a5df.jpeg)
### 1行づつ繰り返しセルの値(中身)を取得
```Python:excel_read.py
# openpyxlをimport
import openpyxl

# 1行ずつ読み込み表全体を表示する
# セルの値(中身)を取得する
# ブックを変数に格納
wb = openpyxl.load_workbook("Books/Book_read.xlsx")
# シートを変数に名前で格納
ws = wb["Sheet1"]
# for分で1行づつ読み取りながらprint()で表示させる
for row in ws.iter_rows(min_row=2, min_col=1):
    # 空のリストを作成
    value_list = []
    # 1行分のデータをリストに格納する。
    for c in row:
        value_list.append(c.value)
    # リスト内のデータを表示させる
    print(value_list)
```
for文で1行づつ繰り返し、1列づつセルを読み取ってリストに格納し
リストの中身を表示させる。（※格納方法、表示方法模索中）

今回はExcelの読み込みを中心に書きました。
書き方、見やすさなどでコメントでご指摘、ご意見いただければ幸いです。
次回はExcelへの書き込みについて書いていきたいと思います。

https://qiita.com/adgjmptw0/items/ae48e0d057f5dc981418

https://qiita.com/adgjmptw0/items/afbf2a0c26e993249ae2

# 参考文献
・[PythonでExcel、メール、webを自動化する本](https://www.amazon.co.jp/Python%E3%81%A7Excel%E3%80%81%E3%83%A1%E3%83%BC%E3%83%AB%E3%80%81Web%E3%82%92%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%99%E3%82%8B%E6%9C%AC-%E4%B8%AD%E5%B6%8B%E8%8B%B1%E5%8B%9D/dp/4815606390)