0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【python】openpyxlで罫線の設定の取得方法

Posted at

きっかけ

pythonにてopenpyxlを使用し罫線を引くところまではできたのだが、一つのファイル内に複数のフォーマットが存在し、フォーマットに合わせて罫線を引き直したかったため。
検索したが情報がほとんどない状態だった為メモ。

元の条件分岐による罫線の引き方

※前提として既にフォーマットに合わせて罫線が引いてあるセルとする。
※最終行だけ他の行とフォーマットが異なるため再設定をする。
罫線を引くきっかけとなるセルの値で分岐させて罫線の種類を設定していた。

from openpyxl.styles.borders import Border ,Side

side_dotted = Side(style='hair', color='000000')
side_thin = Side(style='thin', color='000000')

# 最終行の罫線のtopをフォーマットに合わせてhairかthinにしたい
if cell.value == '〇〇':
    cell.border = Border(...(省略)..., top=side_thick, ...(省略))
else:
    cell.border = Border(...(省略)..., top=side_dotted, ...(省略))

しかし条件分岐の設定が増えるとその分コードの行数が増えて馬鹿馬鹿しくなる。
条件分岐の設定が変わった時の対応も面倒くさい。

検索してみた

結果ですが「日本語」で有益な情報はコレくらいでしょうか。

足りない頭で理解してみた

マカロンさんのツイートを見て思い付いたのはブレイクポイントを設定し、セルのオブジェクトを覗き込んでみた。
そしたら…

border > top > border_style:thin

とあるじゃないですか!
もちろんbottom, left, rightもあります。

試行錯誤の時間

おバカだったから

cell.border = Border(...(省略)..., top=cell.border.top.border_style, ...(省略))

なんて書いてエラーを出しました。

良い子のみんなはこう書きましょう!

多分ですが

side_border_top = Side(cell.border.top.border_style, color='000000')
cell.border = Border(...(省略)..., top=side_border_top, ...(省略))

最後に

なんかまとまりの無い記事になってしまいましたが、セルの罫線の設定の取得方法になります。
条件分岐しなくても元のフォーマットを生かしつつ一部変更が可能になりコーダーさんが楽になればと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?