styles.borders【罫線】モジュール

メモ ( 概要 罫線の指定方法 ) 定数
Border【罫線】クラスクラス定義 プロパティ
Side【罫線スタイル】クラスクラス定義 プロパティ

メモ

概要

罫線の指定方法

  • Border【罫線】の作成
    • Side【罫線スタイル】と下記の対象線を指定して作成
    • 四辺:left【左辺の線種】・right【右辺の線種】・top【上辺の線種】・bottom【下辺の線種】
    • 対角線:diagonal【対角の線種】と diagonalUp【右上がりの対角線の有無】・diagonalDown【右下がりの対角線の有無】の組合せ
  • 単一セルの指定
  • 複数セルの指定
    • 一括で指定できない為、該当セルに上記の単一セルの処理
  • 結合セルの指定
    • 結合対象の全てのセルに対して上記の単一セルの処理 (仕様上は左上セルのみで設定可)

定数

線のスタイル備考
BORDER_NONENoneなし
BORDER_DASHDOT'dashDot'一点鎖線
BORDER_DASHDOTDOT'dashDotDot'二点鎖線
BORDER_DASHED'dashed'破線
BORDER_DOTTED'dotted'点線
BORDER_DOUBLE'double'二重線
BORDER_HAIR'hair'点線 (細)
BORDER_MEDIUM'medium'実線 (中)
BORDER_MEDIUMDASHDOT'mediumDashDot'一点鎖線 (中)
BORDER_MEDIUMDASHDOTDOT'mediumDashDotDot'二点鎖線 (中)
BORDER_MEDIUMDASHED'mediumDashed'破線 (中)
BORDER_SLANTDASHDOT'slantDashDot'斜め破線
BORDER_THICK'thick'実線 (太)
BORDER_THIN'thin'実線 (細)

Border【罫線】クラス

クラス定義

クラス備考
親:openpyxl.descriptors.serialisable.Serialisable
インポート:from openpyxl.styles import Border (省略形)
class Border(
    left=None,
    right=None,
    top=None,
    bottom=None,
    diagonal=None,
    diagonal_direction=None,
    vertical=None,
    horizontal=None,
    diagonalUp=False,
    diagonalDown=False,
    outline=True,
    start=None,
    end=None)
罫線
left (Side)左辺の線種
right (Side)右辺の線種
top (Side)上辺の線種
bottom (Side)下辺の線種
diagonal (Side)対角の線種
diagonal_direction
vertical (Side)
horizontal (Side)
diagonalUp (bool)右上がりの対角線の有無
diagonalDown (bool)右下がりの対角線の有無
outline (bool)
start (Side)
end (Side)

プロパティ

プロパティ備考
bottomSide下辺の線種
diagonalSide対角の線種
diagonal_direction
diagonalDownbool右上がりの対角線の有無
diagonalUpbool右下がりの対角線の有無
endSide
horizontalSide
leftSide左辺の線種
outlinebool
rightSide右辺の線種
startSide
tagnamestrタグ名 ('border')
topSide上辺の線種
verticalSide

Side【罫線スタイル】クラス

クラス定義

クラス備考
親:openpyxl.descriptors.serialisable.Serialisable
インポート:from openpyxl.styles import Side (省略形)
class Side(
    style=None,
    color=None,
    border_style=None)
罫線スタイル
style (str)線のスタイル (border_style)
color (Color | str)
border_style (str)線のスタイル (優先)

プロパティ

プロパティ備考
border_stylestrstyle【線のスタイル】のエイリアス
colorColor
stylestr線のスタイル (線のスタイル定数 参照)

罫線の指定方法

from openpyxl import Workbook
from openpyxl.styles import Border, Side, borders

# ワークブック作成
wb = Workbook()
ws = wb.active
WORKBOOK = 'sample.xlsx'
COLOR_BORDER = '000000FF'

# 単一セルの指定
list_boders = [
    borders.BORDER_NONE,
    borders.BORDER_DASHDOT,
    borders.BORDER_DASHDOTDOT,
    borders.BORDER_DASHED,
    borders.BORDER_DOTTED,
    borders.BORDER_DOUBLE,
    borders.BORDER_HAIR,
    borders.BORDER_MEDIUM,
    borders.BORDER_MEDIUMDASHDOT,
    borders.BORDER_MEDIUMDASHDOTDOT,
    borders.BORDER_MEDIUMDASHED,
    borders.BORDER_SLANTDASHDOT,
    borders.BORDER_THICK,
    borders.BORDER_THIN,
]
row = 2
for border in list_boders:
    col = 2
    value = 'None' if border == None else border
    ws.cell(row, col, value)
    side = Side(
        border_style=border,
        color=COLOR_BORDER)
    # 四辺
    col += 1
    cell = ws.cell(row, col)
    cell.border = Border(side, side, side, side)
    # 四辺+右上がりの対角線
    col += 2
    cell = ws.cell(row, col)
    cell.border = Border(
        side, side, side, side,
        diagonal=side,
        diagonalUp=True)
    # 四辺+右下がりの対角線
    col += 2
    cell = ws.cell(row, col)
    cell.border = Border(
        side, side, side, side,
        diagonal=side,
        diagonalDown=True)
    # 四辺+対角線
    col += 2
    cell = ws.cell(row, col)
    cell.border = Border(
        side, side, side, side,
        diagonal=side,
        diagonalUp=True,
        diagonalDown=True)
    row += 2

# 列幅
ws.column_dimensions['A'].width = 2
ws.column_dimensions['B'].width = 20
ws.column_dimensions['C'].width = 10
ws.column_dimensions['D'].width = 2
ws.column_dimensions['E'].width = 10
ws.column_dimensions['F'].width = 2
ws.column_dimensions['G'].width = 10
ws.column_dimensions['H'].width = 2
ws.column_dimensions['I'].width = 10

# 複数セルの指定
ws['B31'] = '複数セル'
side = Side(
    borders.BORDER_THICK,
    COLOR_BORDER)
border = Border(side, side, side, side)
# 1行
cells = ws['E31:G31']
print(cells)
# 出力:
# ((<Cell 'Sheet'.E31>, <Cell 'Sheet'.F31>, <Cell 'Sheet'.G31>),)
for row in cells:
    for cell in row:
        cell.border = border
# 1列
cells = ws['C33:C35']
print(cells)
# 出力:
# ((<Cell 'Sheet'.C33>,), (<Cell 'Sheet'.C34>,), (<Cell 'Sheet'.C35>,))
for row in cells:
    for cell in row:
        cell.border = border
# 複数行・複数列
cells = ws['E33:G35']
print(cells)
# 出力:
# ((<Cell 'Sheet'.E33>, <Cell 'Sheet'.F33>, <Cell 'Sheet'.G33>),
#  (<Cell 'Sheet'.E34>, <Cell 'Sheet'.F34>, <Cell 'Sheet'.G34>),
#  (<Cell 'Sheet'.E35>, <Cell 'Sheet'.F35>, <Cell 'Sheet'.G35>))
for row in cells:
    for cell in row:
        cell.border = border

# 結合セルの指定
ws['B37'] = '結合セル'
side = Side(
    borders.BORDER_THICK,
    COLOR_BORDER)
border = Border(side, side, side, side)
# 1セルのみ指定
ws.merge_cells('C37:E39')
ws['C37'].border = border
# 全セル指定
address = 'G37:I39'
ws.merge_cells(address)
cells = ws[address]
print(cells)
# 出力:
# ((<Cell 'Sheet'.G37>, <MergedCell 'Sheet'.H37>, <MergedCell 'Sheet'.I37>),
#  (<MergedCell 'Sheet'.G38>, <MergedCell 'Sheet'.H38>, <MergedCell 'Sheet'.I38>),
#  (<MergedCell 'Sheet'.G39>, <MergedCell 'Sheet'.H39>, <MergedCell 'Sheet'.I39>))
for row in cells:
    for cell in row:
        cell.border = border

# ワークブック保存
wb.save(WORKBOOK)

罫線のサンプル画像