Pythonで既存のエクセルファイルを編集しているんだけど、
ファイルの送り先がフォントを指定してきた。
デフォルトのフォントも好きじゃなかったし、
Pythonでフォントを変更する方法はないのかな?
あります!
フォントを変更する際の注意点も解説します!
Pythonで既存エクセルファイルのフォントを変更する方法を
Python歴3年の私ができるだけわかりやすく解説し、解決に導きます。
Pythonで既存エクセルのフォントを変更するには
「Font()」を使います。まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
いろんなパターンを網羅しているため長いですが、本題は短いです。
import openpyxl
from openpyxl.styles.fonts import Font
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws['B1'].font = Font(name = 'MS ゴシック')
ws['C1'].font = Font(name = 'MS ゴシック')
ws['D1'].font = Font(name = 'MS ゴシック')
ws['B2'].font = Font(name = 'Arial')
ws['C2'].font = Font(name = 'Arial')
ws['D2'].font = Font(name = 'Arial')
ws['B4'].font = Font(name = 'MS 明朝')
ws['C4'].font = Font(name = 'MS 明朝')
ws['D4'].font = Font(name = 'MS 明朝')
ws['B5'].font = Font(name = 'Century')
ws['C5'].font = Font(name = 'Century')
ws['D5'].font = Font(name = 'Century')
ws['B7'].font = Font(name = 'HGP創英角ポップ体')
ws['C7'].font = Font(name = 'HGP創英角ポップ体')
ws['D7'].font = Font(name = 'HGP創英角ポップ体')
ws['B8'].font = Font(name = 'メイリオ')
ws['C8'].font = Font(name = 'メイリオ')
ws['D8'].font = Font(name = 'メイリオ')
wb.save('input.xlsx')
from openpyxl.styles.fonts import Font
ws[‘B2’].font = Font(name = ‘MS ゴシック’)
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
解説
インポート
import openpyxl
from openpyxl.styles import Font
「openpyxl」のインポートと、フォントを変更するために上記2行を記述します。
フォントを変更
>>7.ws[‘B2′].font = Font(name = ‘MS ゴシック’)
上記一文でフォントを変更することができます。
()内に「name=」を記述し、右辺に「フォント名」を記述しましょう。
【 ワークシート変数.[‘セル名‘].font = (name = ‘フォント名‘) 】
フォント名は、エクセルのフォント選択欄を確認し、必ず「完全一致」になるよう指定してください。
(理由は後述)
表全体のフォントを変更する方法は、下記記事で解説しておりますので、ご参考ください。
フォントが変更される仕組み
試しに存在しない「あああああ」というフォント名を指定して実行した場合、どうなるのでしょうか?
実行してもエラーは出ず、実行後のエクセルファイルを確認すると、
フォント選択欄も「あああああ」になってしまっています。
もちろん、こんなフォントは存在しないため、フォントは正常に変更されません。
実は、Pythonを使ってのフォント変更は、エクセルのフォント選択欄からフォントを選んでいるわけではなく、フォント名を書き換えているのです。
存在しないフォントを指定したり、フォント名が間違うことのないよう、フォント選択欄からコピペするのが無難です。
下図の「C2」セル(Arialフォント)に注目してください。
上の「C1」セル(MSゴシックフォント)とフォントが違うはずなのに、同じフォントになってしまっています。(C4とC5セルも同じ)
これは、ArialとCenturyフォントが日本語に対応していないためです。
日本語に英語のみ対応のフォントを指定するとこういうことが起こります。
だからといって、大きな問題は無いんですけどね。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
開いていなければ、コンピューターを再起動して再度トライしてみましょう。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
フォントが変更されない
指定したフォントがエクセルに存在しないか、フォント名が間違っている可能性があります。
なので、大文字・小文字・全角・半角・スペースなど、エクセルのフォント選択欄と完全一致しないと正しく表示されません。
エクセルのフォント選択欄と構文とを再度よく比較しましょう。
まとめ
Pythonで既存エクセルファイルのフォントを変更する方法を解説いたしました。
フォント変更は
「from openpyxl.styles.fonts import Font」と
「ワークシート変数[‘セル名’].font = Font(name = ‘フォント名’)」
をセットで覚えてください。
最後までお読みいただき、ありがとうございました。がんばってください!