utils.cell【セル関連ユーティリティ】モジュール

メモ ( 概要 モジュール内定義 (関数一覧) ) 関数

メモ

概要

モジュール内定義


関数

関数備考
absolute_coordinate(
    coord_string)
セルアドレス ⇒ 絶対セルアドレス 変換
戻り値 (str)絶対セルアドレス
coord_string (str)セルアドレス
使用例
'B3' ⇒ '$B$3'
cols_from_range(
    range_string)
セル範囲アドレス ⇒ 列単位セルアドレス
戻り値列単位セルアドレス ジェネレータ
range_stringセル範囲アドレス
(関連:rows_from_range【セル範囲アドレス ⇒ 行単位セルアドレス】)
使用例
A1:B3 ⇒
[1] ('A1', 'A2', 'A3')
[2] ('B1', 'B2', 'B3')
column_index_from_string(
    str_col)
列文字列 ⇒ 列番号 変換
戻り値 (int)列番号
str_col列文字列
(関連:get_column_letter【列番号 ⇒ 列文字列 変換】)
使用例
'B' ⇒ 2
coordinate_from_string(
    coord_string)
セルアドレス ⇒ 列文字列・行番号 変換
戻り値 (tuple) (列文字列, 行番号) の tuple【タプル】
coord_string (str)セルアドレス
使用例
'B3' ⇒ ('B', 3)
coordinate_to_tuple(
    coordinate)
セルアドレス ⇒ 行列番号 変換
戻り値 (tuple) (行番号, 列番号) の tuple【タプル】
      注) 行番号が先
coordinate (str)セルアドレス
使用例
A2 ⇒ (2, 1)
get_column_interval(
    start,
    end)
列範囲 ⇒ 列文字列リスト 変換
戻り値 (list)列文字列のリスト
start (str | int)開始列
end (str | int)終了列
使用例
('A', 'C') ⇒ ['A', 'B', 'C']
(4, 6) ⇒ ['D', 'E', 'F']
get_column_letter(
    idx)
列番号 ⇒ 列文字列 変換
戻り値 (str)列文字列
idx (int)列番号
(関連:column_index_from_string【列文字列 ⇒ 列番号 変換】)
使用例
2 ⇒ 'B'
quote_sheetname(
    sheetname)
シート名シングルクォート囲み
戻り値 (str)シングルクォートで囲まれたシート名
sheetname (str)シート名

シート名を含んだセルアドレスで使用
(参照:workbook.defined_name【名前定義】モジュール)
使用例
"Sheet X" ⇒ "'Sheet X'"
range_boundaries(
    range_string)
セル範囲アドレス ⇒ 行列番号 変換
戻り値下記 tuple【タプル】 (不定値:None)
      (左上の列番号, 左上の行番号,
       右下の列番号, 右下の行番号)
range_stringセル範囲アドレス
使用例
A2:C4 ⇒ (1, 2, 3, 4)
range_to_tuple(
    range_string)
セル範囲アドレス ⇒ 行列番号 変換 (シート名対応)
戻り値下記 tuple【タプル】 (不定値:None)
      (シート名,
       (左上の列番号, 左上の行番号,
        右下の列番号, 右下の行番号))
range_stringシート名付きセル範囲アドレス
使用例
SheetX!A2:C4 ⇒ ('SheetX', (1, 2, 3, 4))
rows_from_range(
    range_string)
セル範囲アドレス ⇒ 行単位セルアドレス
戻り値行単位セルアドレス ジェネレータ
range_stringセル範囲アドレス
(関連:cols_from_range【セル範囲アドレス ⇒ 列単位セルアドレス】)
使用例
A1:B3 ⇒
[1] ('A1', 'B1')
[2] ('A2', 'B2')
[3] ('A3', 'B3')

列変換
column_index_from_string【列文字列 ⇒ 列番号 変換】
get_column_letter【列番号 ⇒ 列文字列 変換】
get_column_interval【列範囲 ⇒ 列文字列リスト 変換】

from openpyxl.utils import (
    column_index_from_string,
    get_column_letter,
    get_column_interval,
)

# column_index_from_string【列文字列 ⇒ 列番号 変換】
list_letter = ['A', 'Z', 'AA', 'ZZ', 'AAA']
for str_col in list_letter:
    idx = column_index_from_string(str_col)
    print(str_col, '⇒', idx)
# 出力:
# A ⇒ 1
# Z ⇒ 26
# AA ⇒ 27
# ZZ ⇒ 702
# AAA ⇒ 703

# get_column_letter【列番号 ⇒ 列文字列 変換】
list_idx = [1, 26, 27, 702, 703]
for idx in list_idx:
    letter = get_column_letter(idx)
    print(f'{idx} ⇒ {letter}')
# 出力:
# 1 ⇒ A
# 26 ⇒ Z
# 27 ⇒ AA
# 702 ⇒ ZZ
# 703 ⇒ AAA

# get_column_interval【列範囲 ⇒ 列文字列リスト 変換】
list_start_end = [('A', 'C'), ('B', 4), (3, 'E'), (4, 6), (24, 27)]
for start, end in list_start_end:
    list_col = get_column_interval(start, end)
    print(f'({start}, {end}) ⇒ {list_col}')
# 出力:
# (A, C) ⇒ ['A', 'B', 'C']
# (B, 4) ⇒ ['B', 'C', 'D']
# (3, E) ⇒ ['C', 'D', 'E']
# (4, 6) ⇒ ['D', 'E', 'F']
# (24, 27) ⇒ ['X', 'Y', 'Z', 'AA']

セルアドレス分割
coordinate_from_string【セルアドレス ⇒ 列文字列・行番号 変換】
coordinate_to_tuple【セルアドレス ⇒ 行列番号 変換】

from openpyxl.utils.cell import coordinate_from_string
from openpyxl.utils import coordinate_to_tuple

# coordinate_from_string【セルアドレス ⇒ 列文字列・行番号 変換】
list_coord = ['A1', 'Z99', 'ZZ99']
for coord_string in list_coord:
    tpl = coordinate_from_string(coord_string)
    print(f'{coord_string} ⇒ {tpl}')
# 出力:
# A1 ⇒ ('A', 1)
# Z99 ⇒ ('Z', 99)
# ZZ99 ⇒ ('ZZ', 99)

# coordinate_to_tuple【セルアドレス ⇒ 行列番号 変換】
list_coord = ['A2', 'B1', 'Z99', 'ZZ99']
for coord_string in list_coord:
    tpl = coordinate_to_tuple(coord_string)
    print(f'{coord_string} ⇒ {tpl}')
# 出力:
# A2 ⇒ (2, 1)
# B1 ⇒ (1, 2)
# Z99 ⇒ (99, 26)
# ZZ99 ⇒ (99, 702)

セル範囲アドレス ⇒ セルアドレス
cols_from_range【セル範囲アドレス ⇒ 列単位セルアドレス】
rows_from_range【セル範囲アドレス ⇒ 行単位セルアドレス】

from openpyxl.utils import cols_from_range, rows_from_range

# セル範囲アドレス
list_range = ['A1', 'A1:A3', 'A1:C1', 'A1:B3']

# cols_from_range【セル範囲アドレス ⇒ 列単位セルアドレス】
for range_string in list_range:
    print(f'{range_string} ⇒')
    for cols in cols_from_range(range_string):
        print(cols)
    print()
# 出力:
# A1 ⇒
# ('A1',)
#
# A1:A3 ⇒
# ('A1', 'A2', 'A3')
#
# A1:C1 ⇒
# ('A1',)
# ('B1',)
# ('C1',)
#
# A1:B3 ⇒
# ('A1', 'A2', 'A3')
# ('B1', 'B2', 'B3')

# rows_from_range【セル範囲アドレス ⇒ 行単位セルアドレス】
for range_string in list_range:
    print(f'{range_string} ⇒')
    for rows in rows_from_range(range_string):
        print(rows)
    print()
# 出力:
# A1 ⇒
# ('A1',)
#
# A1:A3 ⇒
# ('A1',)
# ('A2',)
# ('A3',)
#
# A1:C1 ⇒
# ('A1', 'B1', 'C1')
#
# A1:B3 ⇒
# ('A1', 'B1')
# ('A2', 'B2')
# ('A3', 'B3')

セル範囲アドレス ⇒ 行列番号
range_boundaries【セル範囲アドレス ⇒ 行列番号 変換】
range_to_tuple【セル範囲アドレス ⇒ 行列番号 変換 (シート名対応)】

from openpyxl.utils.cell import range_boundaries, range_to_tuple

# range_boundaries【セル範囲アドレス ⇒ 行列番号 変換】
list_cells = [
    'A2', 'A2:C4', 'A2:A4', 'A2:C2',
    'B', 'B:D', '2', '2:4', '$A$2:$C$4',
]
for range_string in list_cells:
    conv = range_boundaries(range_string)
    print(f'{range_string} ⇒ {conv}')
# 出力:
# A2 ⇒ (1, 2, 1, 2)
# A2:C4 ⇒ (1, 2, 3, 4)
# A2:A4 ⇒ (1, 2, 1, 4)
# A2:C2 ⇒ (1, 2, 3, 2)
# B ⇒ (2, None, 2, None)
# B:D ⇒ (2, None, 4, None)
# 2 ⇒ (None, 2, None, 2)
# 2:4 ⇒ (None, 2, None, 4)

# range_to_tuple【セル範囲アドレス ⇒ 行列番号 変換 (シート名対応)】
list_range = [
    'SheetX!$A$2:$C$4', 'SheetY!A2:C4', "'Sheet SP'!A2:C4",
    'SheetX!A:C', 'SheetX!2:4', 'SheetX!A', 'SheetX!2',
]
for range_string in list_range:
    conv = range_to_tuple(range_string)
    print(f'{range_string} ⇒ {conv}')
# 出力:
# SheetX!$A$2:$C$4 ⇒ ('SheetX', (1, 2, 3, 4))
# SheetY!A2:C4 ⇒ ('SheetY', (1, 2, 3, 4))
# 'Sheet SP'!A2:C4 ⇒ ('Sheet SP', (1, 2, 3, 4))
# SheetX!A:C ⇒ ('SheetX', (1, None, 3, None))
# SheetX!2:4 ⇒ ('SheetX', (None, 2, None, 4))
# SheetX!A ⇒ ('SheetX', (1, None, 1, None))
# SheetX!2 ⇒ ('SheetX', (None, 2, None, 2))

その他変換
absolute_coordinate【セルアドレス ⇒ 絶対セルアドレス 変換】
quote_sheetname【シート名シングルクォート囲み】

from openpyxl.utils import absolute_coordinate, quote_sheetname

# absolute_coordinate【セルアドレス ⇒ 絶対セルアドレス 変換】
list_coord = [
    'A1', 'Z99', 'AA100', 'A1:C3',
    'A:C', '1:3', 'A', '1',
    '$B$3', '$B3', 'B$3']
for coord in list_coord:
    abs_coord = absolute_coordinate(coord)
    print(f'{coord} ⇒ {abs_coord}')
# 出力:
# A1 ⇒ $A$1
# Z99 ⇒ $Z$99
# AA100 ⇒ $AA$100
# A1:C3 ⇒ $A$1:$C$3
# A:C ⇒ $A:$C
# 1:3 ⇒ $1:$3
# A ⇒ $A
# 1 ⇒ $1
# $B$3 ⇒ $B$3
# $B3 ⇒ $B$3
# B$3 ⇒ $B$3

# quote_sheetname【シート名シングルクォート囲み】
list_sheetname = ['Sheet', "'Sheet'", 'Sheet SP', "Taro's Sheet"]
for sheetname in list_sheetname:
    sheetname_quote = quote_sheetname(sheetname)
    print(f'[{sheetname}] ⇒ [{sheetname_quote}]')
# 出力:
# [Sheet] ⇒ ['Sheet']
# ['Sheet'] ⇒ ['''Sheet''']
# [Sheet SP] ⇒ ['Sheet SP']
# [Taro's Sheet] ⇒ ['Taro''s Sheet']