from openpyxl import Workbook
from openpyxl.utils import get_column_letter
def set_column_widths_based_on_longest_part(sheet, target_row):
"""
指定した行(1-based index)のセルをスキャンし、
改行で分割した中で最も長い文字列を基準に列幅を設定する。
"""
col_widths = {}
# target_row 行だけを見る
for cell in sheet[target_row]:
if cell.value and isinstance(cell.value, str):
parts = cell.value.split('\n')
# 改行で分割したすべての要素の最大長を取得
max_len = max(len(p) for p in parts)
col_idx = cell.column # 1-based index
# 同じ列でより長い要素があれば更新
if col_idx not in col_widths or max_len > col_widths[col_idx]:
col_widths[col_idx] = max_len
# 列幅を設定(余白として +2)
for col_idx, width in col_widths.items():
letter = get_column_letter(col_idx)
sheet.column_dimensions[letter].width = width + 2
# --- 使用例 ---
wb = Workbook()
ws = wb.active
# 13行目に改行入りデータをセット
ws['A13'] = "氏名\nやまだたろう"
ws['B13'] = "部署\n開発部\n第二開発課"
ws['C13'] = "役職\n主任"
# 13行目を基準に列幅を自動調整
set_column_widths_based_on_longest_part(ws, target_row=13)
wb.save("output.xlsx")
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme