目的
ワークシートからデータを取得するとき ExcelVBAだと以下を使用することが多い
・Range.End(xlDown).Row:下へ
・Range.End(xlUp).Row:上へ
・Range.End(xlToLeft).Row:左へ
・Range.End(xlToRight).Row:右へ
Worksheets("Sheet1").Range("B3:P8") 'にデータが存在する場合
With ThisWorkbook.Worksheets("Sheet1")
Debug.Print .Range("B1").End(xlDown).Row
Debug.Print .Range("B" & Rows.count).End(xlUp).Row
Debug.Print .Range("A3").End(xlToLeft).Column
Debug.Print .Range("B3").End(xlToRight).Column
End With
OpenPyXLでワークシートの場合
※ワークシート上で、データが存在するCellの最小/最大の位置
※TODO VBA like な Range 指定
max_column
The maximum column index containing data (1-based)
Type: int
max_row
The maximum row index containing data (1-based)
Type: int
min_column
The minimum column index containing data (1-based)
Type: int
min_row
The minimium row index containing data (1-based)
Type: int
ws = wb["Sheet1"]
print(ws.min_row)
print(ws.max_row)
print(ws.max_column)
print(ws.min_column)
対象データは郵便番号検索の17ISHIKA.CSV をワークシートに取込んだもの
Windows 10 Pro + Python3 + OpenPyXL で CSVファイルを書き込んでみる
パッケージの追加
> pip3 install openpyxl
サンプルコード
# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode
# pip3 install openpyxl (-U)
import openpyxl
xlfile = "samp.xlsx"
wksheet = "KENCODE"
wb = openpyxl.load_workbook(xlfile)
# ワークシート名のリストを取得する
lst = wb.sheetnames
# ワークシートが存在しない場合終了する
if lst.count(wksheet) == 0:
wb.close()
exit()
# データが存在する範囲 row column の取得
ws = wb[wksheet]
print(ws.min_row)
print(ws.min_column)
print(ws.max_row)
print(ws.max_column)
#第1案---------------------------------------------
for row in range(ws.min_row, ws.max_row + 1):
for col in range(ws.min_column, ws.max_column + 1):
print(row, col, wb[wksheet].cell(column=col, row=row).value)
#---------------------------------------------------
#第2案---------------------------------------------
for row in range(ws.min_row, ws.max_row + 1):
for col in ws[row]:
print(row, col.value)
#---------------------------------------------------
wb.close()
参考にしたのは以下のサイト
openpyxl.worksheet.cell_range module
openpyxl.worksheet.worksheet module