- すでに保存されたExcelをOpenpyxlで開いてから、処理する流れを想定している
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
# 既存Excelファイルを開く
wb = load_workbook(output_file)
# シートを選択(最初のシートであれば ws = wb.active でもよい)
ws = wb['Sheet1']目次
先頭行を固定する
# 先頭行を固定する
ws.freeze_panes = 'A2'フィルタを設定する
# 先頭行にフィルタを設定する
ws.auto_filter.ref = ws.dimensions列幅を調整する
- lenだと英語と日本語混在だとうまくカウントできないため、関数 get_east_asian_width() を利用する(別頁参照)
import unicodedata
def get_east_asian_width(text):
width = 0
for char in text:
if unicodedata.east_asian_width(char) in ('F', 'W', 'A'):
width += 2
else:
width += 1
return width# 各列の幅を自動で調整する(ぴったりにはならない)
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.utils import get_column_letter
for column in ws.columns:
max_length = 0
column = [cell for cell in column]
for cell in column:
v = cell.value
if v:
try:
if get_east_asian_width(v) > max_length:
print(v)
max_length = get_east_asian_width(v)
except:
pass
print(max_length)
adjusted_width = max_length
ws.column_dimensions[column[0].column_letter].width = adjusted_width上書きして終了
# Excelファイルを上書き
wb.save(output_file)
wb.close()
# エラー防止のため以下(「Pythonによってファイルは開かれているため、操作を完了できません」)
# ファイルの参照を解放
del wb
# ガバレージコレクションを削除
import gc
gc.collect()