はじめに
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'
応用
状況
対策案
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()
結果
固定の確認
列の幅の確認
終わりに
pandasなどでデータを保存したエクセルにおいて、列名が見えるようにタイトル部分を固定し、明らかにより広い列サイズが必要な部分は値を指定してサイズを広げるようにした。これによって作業の工数を簡単に減らすことができる。
今回は列サイズを広げるために、値を指定したが、文字列の長さに比例したサイズ調整をした方が、より柔軟性があったと思われる。
参考