0
0

More than 1 year has passed since last update.

[python] openpyxlでエクセルの行列を固定、サイズを調整する方法

Last updated at Posted at 2023-08-05

はじめに

pandasデータ、csv形式のデータをエクセルに保存する場合、

Codeまとめ

行の高さ、列の幅を変更する。

import openpyxl


wb = openpyxl.load_workbook('Excel.xlsx')

ws = wb['Sheet1']

# 行の高さを調整
ws.row_dimensions[1].height = 30

# 列の幅を調整
ws.column_dimensions['B'].width = 50

固定する方法

import openpyxl

wb = openpyxl.load_workbook('Excel.xlsx')

sheet = wb['Sheet1']


# 4番目行のA列を固定 => 4行を固定
sheet.freeze_panes = 'A4'

# 1番目行のB列を固定 => B列を固定
sheet.freeze_panes = 'B1'

# 4番目行のC列を固定 => 4行C列を固定
sheet.freeze_panes = 'C4'

# 固定の解除(デフォルトに戻す)
sheet.freeze_panes = 'A1'

応用

状況

image.png

対策案

pandasでデータをまとめて表を作成したが、その列の幅が文字列に対して狭くて見えない。また、データが多すぎて下の方を参照する場合はその列名が見えないので固定するなどの作業が増えてしまう。
-> より広い幅が必要な列は広く設定し、常に列名がみえるように、A2より上部を固定(すなわちA2を固定)させる。

Code

freeze_pane.py
import openpyxl


def freeze_pane():
    # 読み込むエクセルを指定
    wb = openpyxl.load_workbook('result.xlsx')

    # すべてのシートに対して、作業を行う。
    for sheet_name in wb.sheetnames:

        # シートを指定
        sheet = wb[str(sheet_name)]

        # 固定する行を指定。A2を指定すると、A1を含んだ上部が固定される。
        sheet.freeze_panes = 'A2'

        # 列の幅を調整。B列全体のサイズを40にした。
        sheet.column_dimensions['B'].width = 40

    # 保存
    wb.save('result.xlsx')
    print("successfully saved")


if __name__ == "__main__":
    freeze_pane()

結果

固定の確認

image.png
1列目が固定となり、同時に8列目以降が見えている。


列の幅の確認

image.png
列幅を40に調整した結果39.38となった。

終わりに

pandasなどでデータを保存したエクセルにおいて、列名が見えるようにタイトル部分を固定し、明らかにより広い列サイズが必要な部分は値を指定してサイズを広げるようにした。これによって作業の工数を簡単に減らすことができる。
今回は列サイズを広げるために、値を指定したが、文字列の長さに比例したサイズ調整をした方が、より柔軟性があったと思われる。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0