【Python】openpyxlでExcelの罫線を設定・変更する方法

今回はopenpyxlモジュールで用意されている罫線の種類や引き方についてみていきましょう。

これから紹介するコードは以下のコードの続きになると考えてください。シートまで開いた状態からのスタートになります。

Excelファイルの読み込みからシートの取得までの方法は以下の記事にまとめています。

関連記事

PythonでExcel操作をするときには必ずファイル(ワークブック)の読み込みからシートの指定をする必要があります。 今回はそんな基本的な部分のコードの書き方を3ステップで紹介していきます。 1:openpyxlモジュールの[…]

PythonでExceを読み込む方法【ワークブックからシートの指定まで】

罫線に必要なモジュール

  • BorderクラスとSideクラスをインポートしています。
  • Sideクラス:罫線の種類や色のオブジェクトを作る
  • Borderクラス:罫線の場所のオブジェクトを作る

Excelの罫線を扱うためにはopenpyxlだけではなくBorderとSideもインポートする必要があります。

公式ドキュメントはコチラ(ただし、BorderとSideの引数の種類を確認できるだけで具体的な使い方は書かれていません。

罫線の引き方

STEP1:罫線のスタイルを決める

Sideオブジェクトを作る

  • 罫線の種類と色はSideオブジェクトで指定します。
  • styleには罫線の種類(下の表)
  • colorには罫線の色(カラーコード)を指定

このように罫線のスタイルを持つSideオブジェクトをつくります。

罫線だけでも10種類以上あるので、色も考え出すと組み合わせはたくさんありますね。

罫線の種類

openpyxlの罫線の種類
openpyxlの罫線の種類
罫線名線の見た目罫線名線の見た目
'thin'最も細い実線'dashDot'点線と破線(ー・)
'medium'中くらいの太さの実線'mediumDashDot'点線と破線の太目
'tick'最も太い実線'dashDotDot'点線2つと破線(ー・・)
'double'二重線'mediumDashDotDot'点線2つと破線の太目
'hair'最も細い点線'slantDashDot'斜めに切れ込みが入った線
'medium'ほどの太さ
'dotted'点線
'dashed'破線
'mediumDashed'太い破線

使用できる色

16進数のカラーコードを文字列で渡します。「#」はいりません。

よく使う色は下4色くらいだと思います。

'000000' 'FFFFFF' 'FF0000' '0000FF'

ほかの色コードの確認はコチラ

色の公式ドキュメントはコチラ

STEP2:罫線の場所を決める

Borderオブジェクトを作成

  • Borderオブジェクトを作成
    • 引数でどの場所にどの罫線を引くかを指定
    • top、bottomなどがある(下表を参照)
  • セルのborder属性に代入
    • セルは(’B6’のような)行列名で指定
    • (row、columnを使う)行列番号でもOK
openpyxlの罫線の場所
openpyxlの罫線の場所

罫線を引きたい場所はBorderの引数指定できます。組み合わせは自由です。

引数の意味一覧

引数意味
topセルの上
bottomセルの下
leftセルの左
rightセルの右
diagonal対角線
diagonalDowndiagonalと一緒に使う
Trueで右下がりの対角線
diagonalUpdiagonalと一緒に使う
Trueで右上がりの対角線

モジュールの中身を確認すると上下左右以外に垂直(vertical)、水平(horizontal)などもありますが、指定しても罫線に反映されませんでした。

罫線の消し方

  • Borderオブジェクトの引数にNoneを渡す

これで罫線を削除できます。

複数のセルに罫線を引く方法

  • 一つ一つのセルをループで取り出して罫線を設定します。
  • ループの方法を2通り紹介します。

ここでは以下の画像の表を作成してみます。

B2~H10の矩形(くけい)領域に罫線を引いています。

openpyxlで複数セルに罫線を引く
openpyxlで複数セルに罫線を引く

複数セルの領域を行列名で指定する方法です。

sheet['B2:H10']は2重のタップルになっています。

内側のタップルには矩形領域を行ごとに区切ったものが入っています。

つまり、((B2~H2)、(B3~H3)~(B10~H10))と格納されています。

複数セルの領域を行列番号で指定する方法です。

Bの列番号は2、Hの列番号は8となります。

まとめ

  • 「from openpyxl.styles.borders import Border, Side」が必要
  • Sideオブジェクトで罫線の種類と色を指定
  • Boderオブジェクトで罫線の場所を指定
  • Cellオブジェクトのborder属性にBorderオブジェクトを代入

関連記事

プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]

【独学】Pythonを学習できる無料&有料教材7選