openpyxlで編集したエクセルファイルが完成したんだけど、
なんだかシンプルすぎ…。
罫線があればもう少しマシになると思うんだけど、
openpyxlで罫線を引く方法はないのかな?
ありますよ!
罫線があると無いのとでは体裁が全然違いますよね!
では今回は、「openpyxlでエクセルに罫線を引く方法」を
できるだけわかりやすく解説いたします!
openpyxlでエクセルに罫線を引く方法
「Side()」と「Border()」を使います。
まずは実行見本と全コードをお見せします。
解説は後ほど行います。
実行見本
全コード
いろんなパターンを網羅しているため長いですが、本題は短いです。
import openpyxl
from openpyxl.styles.borders import Border, Side
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
border_spec1 = Side(style='thin', color='000000')
cell_spec_b2 = Border(top=border_spec1, bottom=border_spec1, left=border_spec1, right=border_spec1)
cell_spec_b4 = Border(top=border_spec1)
cell_spec_b6 = Border(bottom=border_spec1)
cell_spec_b8 = Border(left=border_spec1)
cell_spec_b10 = Border(right=border_spec1)
ws['B2'].border = cell_spec_b2
ws['B4'].border = cell_spec_b4
ws['B6'].border = cell_spec_b6
ws['B8'].border = cell_spec_b8
ws['B10'].border = cell_spec_b10
ws['B12'].border = Border(diagonal=border_spec1, diagonalDown=True)
ws['B14'].border = Border(diagonal=border_spec1, diagonalUp=True)
ws['D2'].border = Border(bottom=Side(style='hair'))
ws['D4'].border = Border(bottom=Side(style='thin'))
ws['D6'].border = Border(bottom=Side(style='medium'))
ws['D8'].border = Border(bottom=Side(style='thick'))
ws['D10'].border = Border(bottom=Side(style='dashed'))
ws['D12'].border = Border(bottom=Side(style='dotted'))
ws['D14'].border = Border(bottom=Side(style='dashDot'))
ws['D16'].border = Border(bottom=Side(style='dashDotDot'))
ws['D18'].border = Border(bottom=Side(style='double'))
wb.save('input.xlsx')
from openpyxl.styles.borders import Border, Side
border_spec1 = Side(style='thin', color='000000')
cell_spec_b2 = Border(top=border_spec1, bottom=border_spec1, left=border_spec1, right=border_spec1)
ws['B2'].border = cell_spec_b2
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
解説
インポート
>>1.import openpyxl
>>2.from openpyxl.styles.borders import Border, Side
「openpyxl」のインポートと、罫線を操作するため、上記2行を記述します。
2行目の「Border」と「Side」は冒頭で触れた「Border()」と「Side()」に関連があります。
後ほど出てきますので、頭の片隅に置いておいてください。
罫線の色・スタイルを決める
>>7.border_spec1 = Side(color=’000000′, style=’thin’)
上記一文にて、罫線の色とスタイルをひとまず変数に入れています。
【 変数 = Side(color=’色コード‘, style=’スタイル名‘) 】
罫線の色コードについて
実行見本の色コード「000000」は黒色です。
代表的な色コードは下記記事で解説しております。
罫線のスタイル名について
実行見本のスタイル名「thin」は細線です。
代表的なスタイル名をいくつか紹介いたします。
罫線の位置を決める
>>8.cell_spec_b2 = Border(top=border_spec1, bottom=border_spec1, left=border_spec1, right=border_spec1)
少し長いですが、さきほど色・スタイルを入れた変数を「セルの上側・セルの下側・セルの左側・セルの右側」に設定しています(セルの外周を罫線で囲む設定)
前項の色・スタイルと合わせて、この時点で「セルの外周を黒色細線の罫線で囲む設定」をしています。
それをまた別の変数に入れています。手順が長いですが、もうすぐ終わります。
各位置の罫線は下図をご参照ください。
【 罫線変数 = Border(top=上側の罫線変数,bottom=下側の罫線変数,left=左側の罫線変数,right=右側の罫線変数) 】
罫線を削除する
罫線を削除したい場合は、「Border()」の()内に「None」を指定してください。
cell_spec_b2 = Border(None)
斜線の入れ方
少し脱線します。
上図のようにセル内に斜線を入れたい場合は、
「top=」や「left=」の代わりに「diagonal=」を記述します。
>>20.ws[‘B12’].border = Border(diagonal=border_spec1, diagonalDown=True)
>>21.ws[‘B14’].border = Border(diagonal=border_spec1, diagonalUp=True)
「diagonal」が斜線ということです。加えて、右下がり斜線なのか、右上がり斜線なのかを記述します。
- diagonalDown=True:右下がり斜線
- diagonalUp=True:右上がり斜線
セルに罫線を設定する
>>14.ws[‘B2’].border = cell_spec_B2
これまでに設定した「色・スタイル」と「位置」を、上記一文にてセルに設定しています。
左辺は「 [‘罫線を設定したいセル’].border 」、右辺はこれまで「色・スタイル・位置を設定した変数」です。
罫線を設定する際は、設定するセルに「.border」を付けてください。
【 ワークシート変数[‘セル名‘].border = 色・スタイル・位置を設定した変数 】
これでセルに罫線が設定できました。お疲れさまでした。
表全体に罫線を設定する方法
表全体に罫線を設定することもできます。
少し難しくなりますが、下記記事で解説しておりますので、ご参考ください。
書き方・省略について
これまで、色・スタイル・位置を変数に入れ、それをセルに設定する方法を解説いたしました。
今回の変数「border_spec1」のように、何度も登場するスタイルや位置の場合は、
一旦変数に入れて使いまわす書き方が楽です。
しかしながら、変数を使わないで記述する方法もあります。
一度しか使わない場合は下記のような書き方の方が楽になる場合がありますので、ご参考までに覚えておいてください。
▼変数を使わない書き方
>>23.ws[‘D2′].border = Border(bottom=Side(style=’hair’))
【 ワークシート変数[‘セル名‘].border=Border(位置=Side(style=’スタイル‘),color=’色コード‘) 】
今回の例では「色コード」を省略していますが、省略した場合の色は「黒色」になります。
その他の解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
開いていなければ、コンピューターを再起動して再度トライしてみましょう。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
まとめ
openpyxlで既存エクセルファイルに罫線を設定する方法を解説いたしました。
「Side()」と「Border()」をセットで覚えておきましょう。
最後までお読みいただき、ありがとうございました。がんばってください!