書式関係のクラスは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パッケージにいろいろな機能がある。
参照せたれよ。