今回はopenpyxlモジュールで用意されている罫線の種類や引き方についてみていきましょう。
これから紹介するコードは以下のコードの続きになると考えてください。シートまで開いた状態からのスタートになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import openpyxl #罫線の設定には以下のモジュールが必要 from openpyxl.styles.borders import Border, Side path = r"C:\Documents\sample.xlsx" wb = openpyxl.load_workbook(path) sheet = wb['シート1'] #この続きのコードを紹介します。 #最後は必ず保存します。 wb.save(path) |
Excelファイルの読み込みからシートの取得までの方法は以下の記事にまとめています。
PythonでExcel操作をするときには必ずファイル(ワークブック)の読み込みからシートの指定をする必要があります。 今回はそんな基本的な部分のコードの書き方を3ステップで紹介していきます。 1:openpyxlモジュールの[…]
罫線に必要なモジュール
- BorderクラスとSideクラスをインポートしています。
- Sideクラス:罫線の種類や色のオブジェクトを作る
- Borderクラス:罫線の場所のオブジェクトを作る
Excelの罫線を扱うためにはopenpyxlだけではなくBorderとSideもインポートする必要があります。
1 |
from openpyxl.styles.borders import Border, Side |
公式ドキュメントはコチラ(ただし、BorderとSideの引数の種類を確認できるだけで具体的な使い方は書かれていません。
罫線の引き方
STEP1:罫線のスタイルを決める
Sideオブジェクトを作る
- 罫線の種類と色はSideオブジェクトで指定します。
- styleには罫線の種類(下の表)
- colorには罫線の色(カラーコード)を指定
1 2 3 4 5 |
#黒い実線 side1 = Side(style='thin', color='000000') #赤い太破線 side2 = Side(style='mediumDashed', color='FF0000') |
このように罫線のスタイルを持つSideオブジェクトをつくります。
罫線だけでも10種類以上あるので、色も考え出すと組み合わせはたくさんありますね。
罫線の種類
使用できる色
16進数のカラーコードを文字列で渡します。「#」はいりません。
よく使う色は下4色くらいだと思います。
STEP2:罫線の場所を決める
Borderオブジェクトを作成
- Borderオブジェクトを作成
- 引数でどの場所にどの罫線を引くかを指定
- top、bottomなどがある(下表を参照)
- セルのborder属性に代入
- セルは(’B6’のような)行列名で指定
- (row、columnを使う)行列番号でもOK
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
side1 = Side(style='thin', color='000000') side2 = Side(style='mediumDashed', color='FF0000') #周囲に線を引く border_aro = Border(top=side1, bottom=side1, left=side1, right=side1) sheet['B2'].border = border_aro #上と下 border_tb = Border(top=side1, bottom=side2) sheet['B4'].border = border_tb #右と左 border_lr = Border(left=side1, right=side2) sheet.cell(row=6, column=2).border = border_lr #右上がりの対角線 border_dup = Border(diagonal=side1, diagonalUp=True) sheet['D2'].border = border_dup #右上がりの対角線 border_ddw = Border(diagonal=side1, diagonalDown=True) sheet['D4'].border = border_ddw |
罫線を引きたい場所はBorderの引数指定できます。組み合わせは自由です。
引数の意味一覧
モジュールの中身を確認すると上下左右以外に垂直(vertical)、水平(horizontal)などもありますが、指定しても罫線に反映されませんでした。
罫線の消し方
- Borderオブジェクトの引数にNoneを渡す
1 2 |
border_no = Border(top=None, bottom=None, left=None, right=None) sheet['B2'].border = border_no |
これで罫線を削除できます。
複数のセルに罫線を引く方法
- 一つ一つのセルをループで取り出して罫線を設定します。
- ループの方法を2通り紹介します。
ここでは以下の画像の表を作成してみます。
B2~H10の矩形(くけい)領域に罫線を引いています。
1 2 3 4 5 6 |
side1 = Side(style='thin', color='000000') border_aro = Border(top=side1, bottom=side1, left=side1, right=side1) for row in sheet['B2:H10']: for cell in row: cell.border = border_aro |
複数セルの領域を行列名で指定する方法です。
sheet['B2:H10']
は2重のタップルになっています。
内側のタップルには矩形領域を行ごとに区切ったものが入っています。
つまり、((B2~H2)、(B3~H3)~(B10~H10))と格納されています。
1 2 3 4 5 6 |
side1 = Side(style='thin', color='000000') border_aro = Border(top=side1, bottom=side1, left=side1, right=side1) for r in range(2, 11): for col in range(2, 9): sheet.cell(row=r, column=col).border = border_aro |
複数セルの領域を行列番号で指定する方法です。
Bの列番号は2、Hの列番号は8となります。
まとめ
- 「from openpyxl.styles.borders import Border, Side」が必要
- Sideオブジェクトで罫線の種類と色を指定
- Boderオブジェクトで罫線の場所を指定
- Cellオブジェクトのborder属性にBorderオブジェクトを代入
プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]