openpyxlでエクセルファイルを編集しているんだけど、
ブック全体のフォントを統一させるために、
「Sheet1」のフォントを取得して「Sheet2」にコピーしたい…。
なるほど…。
では今回は、「openpyxlでフォントを取得する方法」を
できるだけわかりやすく解説いたします。
また、「フォントサイズ」や「太字」なども取得して、
別シートにコピーする方法も紹介いたします。
openpyxlでフォントを取得するには
「Font」を使います。
まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
import openpyxl
from openpyxl.styles import Font
wb = openpyxl.load_workbook('input.xlsx')
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
cell1 = ws1['A1']
cell2 = ws2['A1']
cell2.font = Font(name=cell1.font.name)
wb.save('output.xlsx')
cell2.font = Font(name=cell1.font.name)
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポートなどフォントに関する基礎解説は、下記記事で行っておりますのでご参考ください。
セルを変数に代入
cell1 = ws1['A1']
cell2 = ws2['A1']
上記コードにて、「Sheet1」と「Sheet2」の「A1セル」をひとまず変数に代入しています。
何でもいいので変数名を書いたら、「=」を書きます。
続けてワークシートが入った変数の後に[‘セル名’]を書いたら完了です。
変数名の付け方や変数に関する解説は、下記記事で行っておりますのでご参考ください。
フォントを取得・コピー
ここからが本題です。
フォントを取得して、「cell2」にコピーする方法を見ていきましょう。
cell2.font = Font(name=cell1.font.name)
上記一文にて、「セルのフォント」を取得し、別の場所にコピーすることができます。
コピー元は前項で変数に代入した「Sheet1のA1セル」で、コピー先は「Sheet2のA1セル」です。
「コピー先のセル」を代入した変数(今回はcell2)を書いたら、続けて「.font」を書きます。
「.font」を書くことによって、「セルのフォントを設定する」という意味だと思ってください。
「=」を書いたら、続けて「Font()」を書きます。
【注意!】
この「Font」は、頭文字が大文字なのでご注意ください。
全て小文字にすると動作しません。
「Font()」の()内には、取得するものを記述します。
今回はフォント名を取得するため、「name」を記述しましょう。
(その他に取得できる書式は後述)
<テンプレ>
【 コピー先の変数.font = Font(name=コピー元の変数.font.name) 】
これで、「コピー元のセル」のフォント名を取得して、「コピー先のセル」にコピーすることができます。
フォント名の他にも取得できる書式があります。
次項をご覧ください。
Font()で取得できる書式
前項で解説した「フォント名」も含めて、「Font()」で取得できる書式をまとめました。
- フォント名:name
- フォントサイズ:size
- 太字:bold
- 斜体:italic
- 上付き文字・下付き文字:vertAlign
- 下線:underline
- 取り消し線:strike
- フォントカラー:color
cell2.font = Font(name=cell1.font.name)
cell2.font = Font(size=cell1.font.size)
cell2.font = Font(bold=cell1.font.bold)
cell2.font = Font(italic=cell1.font.italic)
cell2.font = Font(vertAlign=cell1.font.vertAlign)
cell2.font = Font(underline=cell1.font.underline)
cell2.font = Font(strike=cell1.font.strike)
cell2.font = Font(color=cell1.font.color)
罫線や背景色は、「Font()」では取得できません。
別の記事で解説しておりますので、そちらをご参考ください。
複数のセルのフォントを一括で取得・コピーする方法
前項でフォントを取得・コピーする方法を解説いたしました。
しかしながら、1つのセルしかコピーできていません。
本項では複数のセルのフォントをコピーする方法を紹介いたします。
▼実行前のデータ
▼全コード
import openpyxl
from openpyxl.styles import Font
wb = openpyxl.load_workbook('input.xlsx')
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
r = 0
c = 0
for row1 in ws1 :
c = 1
r = r + 1
for cell1 in row1 :
ws2.cell(row=r, column=c).font = Font(name=cell1.font.name)
c = c + 1
wb.save('output.xlsx')
▼実行後のデータ
基本的には前項で解説したものをfor文でループさせています。
セルの指定やfor文の基礎解説は下記記事で行っておりますので、ご参考ください。
- セルの指定方法:openpyxlで既存のエクセルファイルに文字を書き込みする方法
- for文の基礎:[Python]openpyxlで使えるfor文の基礎
<ざっくり解説>
フォントを取得するセルの指定は、変数を利用しています。
変数「c」と「r」を作り、列は変数「c」、行は変数「r」を指定します。
for文が進むにつれて「c」と「r」を1ずつ増やすことで最後までフォントを取得・コピーすることができます。
※最初はA1(column=1, row=1)、次はB1(column=2, row=1)という具合です。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでフォントを取得する方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!