xlwingsでエクセルファイルを編集しているんだけど、
デフォルトのフォントだとシンプルすぎるので、
ちょっと違うフォントに変更したい…。
なるほど…。
では今回は、「xlwingsでフォントを変更する方法」を
できるだけわかりやすく解説いたします。
「フォントサイズ変更」や「太字にする方法」も
紹介しますので、ぜひ最後まで読んでいってください。
xlwingsでフォントを変更するには
「Font」を使います。まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import xlwings
workbook = xlwings.books.active
worksheet = workbook.sheets.active
worksheet['A1'].api.Font.Name = 'HGP創英角ポップ体'
worksheet['A1'].api.Font.Name = 'HGP創英角ポップ体'
xlwingsの処理は、予想以上に時間がかかることがあります。
プログラムの最後に「print(‘実行完了’)」などを追記し、完了したのを確認してから結果を見ましょう。
事前準備
- xlwingsのインストール
エクセルファイルを実際に操作するには、「xlwings」のインストールが必要になります。
xlwingsのインストール方法
xlwingsを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install xlwings
※xlwingsを使用したことがある場合は、このインストール作業は不要です。
インストール方法詳細やインストールができない場合の対処法、
基本的な使い方などは下記記事をご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート~シートの取得
import xlwings
workbook = xlwings.books.active
worksheet = workbook.sheets.active
上記コードにて、「xlwingsのインポート」「アクティブブック・アクティブシートの取得」をしています。
詳細は「アクティブシートの取得」の記事をご覧ください。
フォントの変更
worksheet['A1'].api.Font.Name = 'HGP創英角ポップ体'
上記一文にて、フォントを変更することができます。
【 コード解説 】
シートが入った変数とセルに続けて「.api.Font.Name」を記述します。
そして「=」の後に「変更後のフォント名」を書いて完了です。
大文字と小文字が混在している部分がありますが、このまま記述してください。
全て小文字にすると正常に動きません。
<テンプレ>
【 シートが入った変数[‘フォントを変更したいセル名’].api.Font.Name = ‘変更後のフォント名’ 】
取得したフォントを適用
では、前項で変更した「A1セル」のフォントを取得して、「A2」セルに適用してみましょう。
import xlwings
workbook = xlwings.books.active
worksheet = workbook.sheets.active
font_name = worksheet['A1'].api.Font.Name
worksheet['A2'].api.Font.Name = font_name
print(font_name)
コードの6行目ですが、前項で左辺だった部分が今度は右辺に来ています。
#前項
worksheet['A1'].api.Font.Name = 'HGP創英角ポップ体'
#今回
font_name = worksheet['A1'].api.Font.Name
前項では「HGP創英角ポップ体」を「A1セルのフォント」に設定するというものでしたが、
今回は「A1セルのフォント」を「変数に代入する」という流れになります。
変数に代入したフォントは、コードの7行目でA2セルに設定しています。
ここは前項とほぼ同じですね。
#前項
worksheet['A1'].api.Font.Name = 'HGP創英角ポップ体'
#今回
worksheet['A2'].api.Font.Name = font_name
6・7行目を要約すると、【「A1セルのフォント」を変数に入れ、その変数を「A2セル」に設定】となります。
変数を介さず、1行にまとめることも可能です。
worksheet['A2'].api.Font.Name = worksheet['A1'].api.Font.Name
これで6・7行目の2行分が1行にまとまりました。
存在しないフォント名を指定した場合
フォントを指定する際、存在しないフォント名を記述したらどうなるのでしょうか。
試しに「utatane」という存在しないフォント名を指定してみます。
worksheet['A1'].api.Font.Name = 'utatane'
特にエラーは出ませんでした。
フォント欄は指定の通りになり、一見すると成功したように見えます。
もっとわかりやすくするために、存在するフォント名を少し変えてやってみましょう。
worksheet['A1'].api.Font.Name = 'HGP創英角ポップ体'
「ポップ」の部分に注目してください。
実際は半角の「ポップ」ですが、今回は全角の「ポップ」にして実行してみます。
今回もフォント欄は変わりました。
しかしながら、A1セルが明らかに「HGP創英角ポップ体」のフォントではありません。
このようにフォント名を少し間違えただけでも正常に表示されませんのでご注意ください。
半角や全角の他にも、大文字や小文字なども違っているとダメです。
必ずエクセルのフォント欄と完全一致になるように記述しましょう。
サイズを変更したり太字にするには
「Font」を使って、フォント名の他にも変更できることがあります。
- フォントサイズ変更
- 太字
- 斜体
- 下線
今回はオマケ程度でさらっと紹介いたします。
フォントサイズ変更
worksheet['A1'].api.Font.Size = 20
太字
worksheet['A1'].api.Font.Bold = True
斜体
worksheet['A1'].api.Font.Italic = True
下線
worksheet['A1'].api.Font.Underline = True
二重下線にしたい場合は、右辺を3にすることで適用されます。
worksheet['A1'].api.Font.Underline = 3
うまく動作しない時
エラーが出る
‘NoneType’ object has no attribute ‘books’
エクセルブックやエクセルファイルを開いていないのに、ブックやファイルを取得しようとした場合に出るエラーです。
事前に対象のファイルを開くように指定するなど、構文を見直してみましょう。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
フォントが変更されない
フォント名が間違っているか、存在しないフォント名を指定している可能性があります。
正式なフォント名と完全一致になるように修正しましょう。
エクセルのフォント欄からコピペするのが無難です。
空のブックが生成される・残る
作業環境によっては「空のブック(Book1)」が生成されたり、残ってしまう場合があります。
このまま作業を続けると、空のブックがどんどん増えていく可能性があるため対処が必要です。
対処法としましては、何か別のエクセルを開いたままにしておきましょう。
そうすることで、空のブックは生成されません。
作業を始める前に、適当なエクセルファイルをひとつ開いておくことをおすすめします。
いつまでたっても実行されない
エラーは出ていないのに、いつまでたっても実行されない場合は、実行内容がエクセルに届いていない可能性があります。
「books.active」「sheets.active」を使用していて、エクセルファイルが最小化されていると、実行内容がエクセルに届かない場合があります。(もう1度実行すると、同じ内容が2回実行される)
エクセルは最小化せず、コードエディタとエクセルを並べて表示させた状態で実行するとうまくいきやすいです。
最後に
xlwingsでフォントを変更する方法を解説いたしました。
当ブログでは、xlwingsやopenpyxlなど、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!