送られてきたエクセルファイルをチェックしてるんだけど、
毎回同じところが文字切れしていて全体が見えない…。
openpyxlを使って「折り返して全体を表示」にする方法は無いの?
ありますよ!
簡単にできますのでぜひ活用してみてください!
openpyxlを使って、セル内の文字を折り返して全体を表示する方法を
Python歴3年の私が、できるだけわかりやすく解説し、解決に導きます。
openpyxlを使って、セル内の文字を折り返して全体を表示するには
「Alignment」の「wrapText」を指定します。
まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import openpyxl
from openpyxl.styles.alignment import Alignment
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws['A2'].alignment = Alignment(wrapText = True)
wb.save('input.xlsx')
ws['A2'].alignment = Alignment(wrapText = True)
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要
解説
インポート
import openpyxl
from openpyxl.styles.alignment import Alignment
「openpyxl」のインポートと、折り返して全体を表示するために、上記2行を記述します。
折り返して全体を表示
ws['A2'].alignment = Alignment(wrapText = True)
まずは折り返しをするセルを指定します。
ワークシート変数とセルを指定したら、続けて「.alignment」を記述してください。
これで指定のセル(今回はA2セル)の折り返しを設定できるようになります。
イコールを書いたら、「Alignment()」を記述し、()内にセルの設定内容を記述します。
「wraptext = True」と指定することで、「折り返して全体を表示」という設定にすることができます。
これで設定は完了です。
<テンプレ>
【 ワークシート変数[‘セル名’].alignment = Alignment(wrapText = True) 】
▼関連記事として、中央揃えにする方法、罫線を設定する方法などを解説しております。
その他の解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
設定を元に戻すには
「折り返して全体を表示する」という設定になっているセルを、元の設定に戻す方法です。
下記のように記述してください。
ws['A2'].alignment = Alignment(wrapText = False)
前項との違いは、最後が「True」か「False」かというだけです。
#前項(折り返して全体を表示)
ws['A2'].alignment = Alignment(wrapText = True)
#設定を戻すコード
ws['A2'].alignment = Alignment(wrapText = False)
「False」にすることで、「折り返して全体を表示」になっているセルの設定を、元に戻すことが出来ます。
時短のコツ
同じ設定を他のセルにも適用したい場合、変数を効果的に使う方法がおすすめです。
下記のコードを見てください。
import openpyxl
from openpyxl.styles.alignment import Alignment
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
orikaeshi = Alignment(wrapText = True)
ws['A1'].alignment = orikaeshi
ws['A2'].alignment = orikaeshi
ws['A3'].alignment = orikaeshi
wb.save('input.xlsx')
コードの7行目で、設定をひとまず変数に入れています。
8~10行目では、変数に入った設定をA1~A3セルに適用しています。
このように変数を活用することで、同じ設定を何度も書かずに済みます。
また、for文を使うことで、さらにコードを短縮できます。
import openpyxl
from openpyxl.styles.alignment import Alignment
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
for row in ws:
for cell in row:
cell.alignment = Alignment(wrapText = True)
wb.save('input.xlsx')
上記コードにて、エクセルの表全体に「折り返して全体を表示」の設定を適用することができます。
for文の詳細は別の記事を用意しておりますので、ご参考ください。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
開いていなければ、コンピューターを再起動して再度トライしてみましょう。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
文字を折り返して全体を表示する方法を解説いたしました。
「Alignment(wrapText = True)」を覚えておいてください。
最後までお読みいただき、ありがとうございました。がんばってください!