LoginSignup
1

More than 5 years have passed since last update.

Windows 10 Pro + Python3 + OpenPyXL でワークシートのデータを取得する

Last updated at Posted at 2019-02-04

目的

ワークシートからデータを取得するとき 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1