「openpyxl excel 折り返して全体を表示」
「python openpyxl 折り返して全体を表示」
といった検索キーワードで、時折このサイト『インストラクターのネタ帳』へアクセスがあります。
Excelで作られたファイルを操作するライブラリ「OpenPyXL」を使って、[セルの書式設定]ダイアログボックス-[配置]タブの、[文字の制御]欄-[折り返して全体を表示する]チェックボックスをOnの状態にするには、
どのようなコードを書けばいいのか、調べていた方による検索でしょう。
折り返して全体を表示する基本
以下のスクリプトが参考にしてください。
bk = xl.Workbook()
ws = bk.worksheets[0]
ws['A1'].value = 'ハロー・ワールド'
ws['A1'].alignment = xl.styles.Alignment(wrapText=True)
上記のスクリプトを実行すると、先頭シートのA1セルに文字列「ハロー・ワールド」が入力され、下図のように[折り返して全体を表示する]がOnの状態になっているhello_world.xlsxブックが、
Cドライブのtempフォルダーに作成されます。
Cell.alginment属性の書き方
折り返して全体を表示する設定を行っているのは、
ws['A1'].alignment = xl.styles.Alignment(wrapText=True)
の行です。ここを、
ws['A1'].alignment.wrapText = True
のように書きたくなる方がいらっしゃると思うのですが、OpenPyXLのCell.alignment属性等で、このような書き方はできません。
ws['A1'].alignment.wrapText = True
を実行すると
AttributeError: Style objects are immutable and cannot be changed.Reassign the style with a copy
と例外が発生してしまいます。
先述のサンプルのように、
ws['A1'].alignment = xl.styles.Alignment(wrapText=True)
とする必要があります。
from openpyxl.styles import Alignmentでインポートした場合
なお、import文で
from openpyxl.styles import Alignment
としておけば、
ws['A1'].alignment = Alignment(wrapText=True)
と書くこともできます。
書籍やネットでは、この書き方を紹介しているほうが多いように感じます。
Alignment型の変数を使う場合
また、
wrap_text = xl.styles.Alignment(wrapText=True)
ws['A1'].alignment = wrap_text
のように、変数を使って書くことも可能です。
折り返して全体を表示する設定を複数のセルに
「python openpyxl 折り返して全体を表示 1行丸ごと」
といった検索キーワードでのアクセスもあります。
先頭シートの1行目にデータを入力し、Cドライブtempフォルダーにorg.xlsxとして保存しておいてから、以下のスクリプトを実行してください。
bk = xl.load_workbook(r'c:\temp\org.xlsx')
ws = bk.worksheets[0]
wrap_text = xl.styles.Alignment(wrapText=True)
for cel in ws['1:1']:
cel.alignment = wrap_text
下図のように、1行目が折り返して全体を表示した状態になります。
「python openpyxl 折り返して全体を表示 1行丸ごと」
とのことですが、どちらかというと特定の1列に対して、折り返して全体を表示する設定を行いたい場合が多いように私には思えます。
for cel in ws['1:1']:
の部分を、
for cel in ws['G:G']:
のように指定すれば、G列が折り返して全体が表示されます。
全セルに対して折り返して全体を表示する設定を行いたいのであれば、以下のような2重ループを使ったスクリプトです。
bk = xl.load_workbook(r'c:\temp\org.xlsx')
ws = bk.worksheets[0]
wrap_text = xl.styles.Alignment(wrapText=True)
for row in ws.iter_rows():
for cel in row:
cel.alignment = wrap_text
実行すると、
上図のような状態になります。
最終更新日時:2023-06-13 13:41
Home » Python » OpenPyXLの使い方 » OpenPyXLを使って折り返して全体を表示する