Excelに文字を入力するとき、大きい文字なら自動的に高さは変わってくれますが、長い文を入力していも幅は変わってくれませんよね。
そこで今回は、PythonでExcelの行や列の高さ・幅を調節する方法を紹介します。
これから紹介するコードは以下のコードの続きになると考えてください。シートまで開いた状態からのスタートになります。
1 2 3 4 5 6 7 8 9 |
import openpyxl path = r"C:\Documents\sample.xlsx" wb = openpyxl.load_workbook(path) sheet = wb['シート1'] #この続きのコードを紹介します。 #最後は必ず保存します。 wb.save(path) |
行・列の高さ・幅を調整
行の高さを調整
- row_dimensionsメソッドに行番号を渡す
- RowDimensionsオブジェクトが返される
- そのheight属性に高さの数値を指定する
1 |
sheet.row_dimensions[1].height = 60 |
「sheet.row_dimensions[1]」でRowDimensionオブジェクトが返されます。もちろん数字の部分が行番号と対応しています。続きの「.height」は行の高さを表す属性です。
メソッドと属性は両方とも(.)で書きますが明確に区別しておきましょう。
デフォルトの行の高さは「18.75」です。
列の幅を調整
- column_dimensionsメソッドに列名を渡す
- ColumnDimensionsオブジェクトが返される
- そのwidth属性に幅の数値を指定する
1 |
sheet.column_dimensions['B'].width = 4 |
オブジェクトとメソッド、属性の話は行の高さを変えるときと同じですが、列名を指定するときは「’B’」のように文字列で渡すことに注意してください。
デフォルトの列幅は「8.38」です。
RowDimensionsやColumnDimensionsの公式サイトはコチラ
列幅の自動調整
- column_letterで列名を取得
- column_dimensionsで列幅を調整
- セルの文字数に2.07をかけ算している理由は下で解説
- 全角なら2.07~2.08倍
- 半角なら1.1~1.2倍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#インポート部分などは省略 #記事の冒頭に書いています。 def adj_col_width(sheet, cell): ''' セル幅の自動調整 ''' col_name = cell.column_letter sheet.column_dimensions[col_name].width = len(cell.value)*2.07 sheet['C2'] = 'とことん独学ブログ' adj_col_width(sheet, sheet['C2']) wb.save(path) |
「とことん独学ブログ」の全角9文字にピッタリなセル幅は18.63です。
18.63÷9=2.07
なので、1文字当たり2.07の幅を取ればいいということでかけ算しています。
半角10文字のときはセル幅が11なので1.1倍すればいいことが分かります。
この方法を方法とfor文を組み合わせると複数のセル幅を調整できますね。
下の画像でも確認できるようにプログラムで列幅を設定したとき、小数点以下は無視されて18となっていました。
長い文を入力したときは誤差が生じるかもしれないので注意が必要です。
ウィンドウ枠の固定・解除
ウィンドウ枠の固定
- Worksheetオブジェクトのfreeze_panes属性に行列名を渡す
- 行列名は文字列で渡す
1 |
sheet.freeze_panes = 'B3' |
注意点は渡した行列名のセルは固定されないことです。今回はB3のセルは固定されません。その上の行や左の列が固定されています。
列や行だけを固定するときも以下のように固定される範囲に注意してコードを書く必要があります。
ウィンドウ枠の固定解除
1 2 3 4 |
#どちらでもOK sheet.freeze_panes = 'A1' sheet.freeze_panes = None |
A1かNoneのどちらでも構いません。これで固定を解除することができます。
まとめ
- 行の高さを変える
- row_dimensionsメソッド&height属性
- 列の幅を変える
- column_dimensionsメソッド&width属性
- ウィンドウ枠の固定
- freese_panes属性