Python と openpyxl を組み合わせれば、Excel シートの列幅を数行のコードで統一できます。セル内容が途中で折り返される、あるいは文字が見切れてしまうといった課題を解消し、レポートを読みやすくする手法をご紹介いたします。
目次
動作環境
項目 | 内容 |
---|
Python | 3.9 以上 |
ライブラリ | openpyxl(pip install openpyxl ) |
入力ファイル例 | performance_data.xlsx |
出力ファイル例 | performance_data_resized.xlsx |
サンプルコード
from openpyxl import load_workbook
# 1. ワークブックとシートを取得
workbook = load_workbook('performance_data.xlsx')
ws_report = workbook.active
# 2. 列幅の設定値(キー:列記号、値:幅)
column_widths = {
'C': 10, # 部門コードなど短い文字列
'D': 28, # 商品名など中程度の文字列
'E': 28 # 備考欄など
}
# 3. 列幅を一括適用
for col_letter, width in column_widths.items():
ws_report.column_dimensions[col_letter].width = width
# 4. 保存
workbook.save('performance_data_resized.xlsx')
コードのポイント
処理 | 説明 |
---|
load_workbook() | 既存ファイルを読み込みます。read_only=False が既定値のため書き込み可能です。 |
column_dimensions[col_letter].width | 対象列の幅を「ポイント」単位で指定します。Excel 上のドラッグ操作と同じ結果になります。 |
辞書で管理 | 列記号と幅を辞書にまとめることで、後からメンテナンスしやすくなります。 |
よくある質問
質問 | 回答 |
---|
自動調整はできますか。 | openpyxl には自動調整機能がないため、セル内容を走査し最長文字数から幅を算出する関数を自作するアプローチが一般的です。 |
幅の単位は何ですか。 | Excel UI で表示される「標準幅」と同じポイント換算(約 1 文字 ≒ 1 単位)です。 |
複数シートに適用したい場合は。 | for ws in workbook.worksheets: のループを追加し、各シートへ同じ辞書を適用してください。 |
応用アイデア
目的 | 実装のヒント |
---|
動的に列幅を算出したい | 各セルの文字数を len(str(cell.value)) で取得し、最大値 + 余白 を幅に設定します。 |
空白列を挿入して余白を確保 | ws_report.insert_cols(idx) で余白用の列を追加すると可読性が向上します。 |
表示形式ごとに列幅を変える | 数値列は狭く、テキスト列は広く設定してメリハリを付けます。 |
まとめ
- 列幅を調整するだけでも表の視認性が大幅に改善 され、レポートの品質向上に直結します。
- openpyxl を利用すれば、手動操作をスクリプトへ置き換え、再現性と作業効率を確保できます。
- 辞書形式で列幅を管理することで、対象列の追加・変更に柔軟に対応できます。
ぜひご自身の Excel 自動化フローに取り入れてみてください。