文字書式を扱う



書式関係のクラスはopenpyxlのstylesモジュールにある。

文字の傾き

左向き90度に回転

wb = openpyxl.load_workbook(file)
ws = wb['1']
ws['A1'].alignment = openpyxl.styles.Alignment(textRotation=90)
wb.save(file)

textRotationは0以上180以下の整数のみ。90以上は右向きに回転する。



揃え

左揃え

wb = openpyxl.load_workbook(file)
ws = wb['1']
ws['A1'].alignment = openpyxl.styles.Alignment(horizontal='general')
wb.save(file)

horizontal: {'left', 'fill', 'justify', 'center', 'right', 'general', 'distributed', 'centerContinuous'}

上揃え

wb = openpyxl.load_workbook(file)
ws = wb['1']
ws['A1'].alignment = openpyxl.styles.Alignment(vertical='bottom')
wb.save(file)

vertical: {'distributed', 'bottom', 'justify', 'top', 'center'}

alignment=Alignment(horizontal='general',
                    vertical='bottom',
                    text_rotation=0,
                    wrap_text=False,
                    shrink_to_fit=False,
                     indent=0)



フォント
塗りつぶし
罫線

Sideクラスで罫線の種類を指定
{'dashDot','dashDotDot', 'dashed','dotted', 'double','hair', 'medium', 'mediumDashDot', 'mediumDashDotDot', 'mediumDashed', 'slantDashDot', 'thick', 'thin'}

Borderクラスで罫線をどこに書くかを指定
{'left', 'right', 'top', 'bottom', 'diagonal', 'diagonal_direction', 'vertical'}

フォーマット
保護



セル幅自動調整

from openpyxl.utils import get_column_letter
from openpyxl.utils import column_index_from_string
import openpyxl


wb = openpyxl.load_workbook(file)
ws = wb['1']
ws.column_dimensions['A'].width = new_column_length*1.23
ws.row_dimensions[1].height = 12
wb.save(file)

for column_cells in sheet.columns:
    new_column_length = max(len(str(cell.value)) for cell in column_cells)
    new_column_letter = (get_column_letter(column_cells[0].column))
    if new_column_length > 0:
        sheet.column_dimensions[new_column_letter].width = new_column_length*1.23


数値はエクセル特有の数値で、ピクセルではない。
列幅に関して、半角数字の場合は文字数+1くらいがちょうどくらい。
高さ調整の場合のキーワードはstrの列ラベルでないといけない。



WorkSheet

openpyxl.worksheet.worksheet module — openpyxl 3.1.2 documentation

セル・行・列・を取得する

ws.cell(row=row_idx, column=col_idx, value=None)
return: Cellクラス
row_idx: 1基底行インデックス
col_idx: 1基底列インデックス

ws[1]
ws['A']
Cellクラスが入ったtupleが返却される。

ws['a1':'c2']
多分に次元tuple
((<Cell 'Sheet1'.'a1'>, <Cell 'Sheet1'.'a2'>, <Cell 'Sheet1'.'a3'>),
(<Cell 'Sheet1'.'b1'>, <Cell 'Sheet1'.'b2'>, <Cell 'Sheet1'.'b3'>),)

値がある列or書式設定ある列の最大インデックス(1基底)

max_column

値がある行or書式設定ある行の最大インデックス(1基底)

max_row

行・列削除

1行削除

ws.delete_rows(1)

2~4行目削除

ws.delete_rows(2,4)

A列削除

ws.delete_cols(1)

B~D列削除

ws.delete_cols(2, 4)

列・行を固定する

編集するエクセルをA1のセルを選択している状態で保存しないと、へんなところで固定されて変になる。とにかく変になる、



CELL

列ラベル

column_letter
(行番号はありません)

座標

cell.coordinate
'A23'


ユーティリティ

openpyxlが用意している機能

座標を絶対座標にする

openpyxl.utils.cell.absolute_coordinate(coord_string)
coord_string: 'B12'
return: '$B$12'

列インデックス > 列名変換

openpyxl.utils.cell.get_column_letter(idx)

メモ

openpyxl.utilsパッケージにいろいろな機能がある。
参照せたれよ。