Excelシート内の特定文字の行数・列数を取得しよう
- 業務上、Excelシート内の行数や列数が追加・削除されることが割と頻繁にある。
- PythonでExcelを読み込む際にその都度、行数や列数を指定し直さないといけない。
方針
特定の文字を検索取得して、その文字のセル番地、つまり行数・列数を取得する。
・・・もちろん、その特定の文字がシートから抹消されることがあればこれも意味なくなるので、重要な文字をターゲットにしてくださいね!!!
開発環境
Jupyter lab
Python3.9.6
Windows
実施内容
題材として「経産省の統計資料」を抜粋し、Excelに一部を転記。
今回は事例として国内用という文字の行数と列数を取得する例を紹介する。
「国内用」のセル番地:(M10), (10行,13列) を取得してくる。
以下、黄色塗りつぶし箇所。
特定文字の行数・列数取得
#必要ライブラリのインポート
import openpyxl
# openpyxlを使ってエクセルファイルを開く
workbook = openpyxl.load_workbook("~~ファイルを指定してください~~")
# シートを取得,シート名はSheet1
ws = workbook["Sheet1"]
# target_valueが一致するセルの座標を検索
# 100行100列の中に探したい文字列があるとして設定
for r in ws.iter_rows(max_row=100, max_col=100):
# 列を一つずつ探索
for c in r:
# もしc.valueがtarget_valueと一致したらその行番号を返す
if c.value == "国内用":
#セル番地を指定する:M10
cell_nloc=c.coordinate
#行数のみcell_nloc[1]を取得に格納
cell_row_n=openpyxl.utils.cell.coordinate_from_string(cell_nloc)[1]
#列数のみをcell_nloc[0]取得し、アルファベットから数字にする
cell_col_m=openpyxl.utils.column_index_from_string(cell_nloc[0])
print("セル番地:"+ cell_nloc)
print("セル行番号:"+ str(cell_row_n))
print("セル列番号:"+ str(cell_col_m))
---output---
セル番地:M10
セル行番号:10
セル列番号:13
解説
- cordinateで特定文字のセル番地をM10のようにアルファベット+数値で取ってくる。
- openpyxl.utils.cell.coordinate_from_stringでM10をタプル形式で("M", 10)として列と行を別々に取り出せるようにする。
- openpyxl.utils.column_index_from_stringで列名アルファベット:Mを列番号:13に変換する。