生きるのをもっと楽に、楽しく

1976年生まれの男性。 コピー機メーカー勤務の会社員です。 いろいろ生き辛さを感じていて、ちょっとずつでも生きるのを楽に、 そして楽しくしていきたいなぁと感じています。 このブログを通じて波長の合う人とつながれればいいなぁと思っています。

Python のエクセルを扱うライブラリー「openpyxl」に列すべてを中央揃えにする処理は無いので気をつけよう!

 

f:id:pakira2:20200731223055j:plain

 

Pythonを使ってエクセルを扱うことができます。

ライブラリーがいくつかありまして。

エクセルのデータを読み込んでいろいろやりたい場合は「Pandas」(パンダス)ってのが便利です。

Pandasのデータフレームって型に読み込んでしまうと、大抵のデータ処理ははあっさりとできてしまいます。

Pandasでもエクセルファイルの読み込みやエクセルへの書き込みはできるのですが、書式とかは変えられません(多分)

エクセルの書式変えたり色々したい場合は「openpyxl」(なんて読むんだこれ?オープンパイソンエクセル?)がオススメです。

 

今日、最初に調べたのは列の幅の設定。

これはあっさりと実現できました。

 

sheet.column_dimensions['B'].width = 50

Python Excelのセルの幅・高さを変更する | 鎖プログラム より引用

 

よっしゃ!( •̀ᴗ•́ )

 

勢いに乗って次は、列の文字揃えを中央揃えにしようとしました。

エクセルでやる場合、列を掴んで中央揃えボタンを押せば終わり。

openpyxlでもそれくらい楽にできると思ったのです。

 

ところが。

 

当てずっぽうで書いてみてもエラーが出る。

例によってググります。

しかし一向にやり方が出てこない!

出てくるのはセルを中央揃えにする方法ばかり。

 

「ちゃうねん!列ごと一気にやりたいの!みんなやりたいでしょ!?」

 

埒が明かないので英語で検索してみます。

文字揃えはAlignmentってのを使うってことがわかったので

 

「openpyxl alignment column」

 

で検索すると一発目に答え出てきた!

 

Styling a Range or even a whole column is not implemented. You have to do it on your own.

python - How to do column alignment in openpyxl? - Stack Overflow より引用

 

「列ごとスタイル変えるのは実装されてないねん。自分でやるしか無いで」(関西弁で意訳)

 

できねーのかよ!!( ;∀;)早く言ってよ!!

 

Pythonって思ったよりずっと簡単にいろんなことができるから、エクセルで簡単にできることは当然簡単にできると思いこんでおりましたよ。( ;∀;)

 

 

じゃあどうすればいいのか?

これは繰り返し処理を使ってセルごとに設定するしかないのです。

めんどくさっ!!(="=)

ただopenpyxlの繰り返し処理は簡単でして。

行ごとの処理の下に、セルごとの繰り返し処理を入れてやればシートを網羅できます。

 

こんな感じ

 

f:id:pakira2:20200731222239p:plain

Pythonで行ごとにセルを操作する(openpyxl) | Create it Myself より引用

 

 

ちなみにフォントも同じ感じで設定します。

 

「くっそー、沼にハマったわ( ;∀;)」

 

と落ち込んでた時にタイムラインに流れてきたツイート

 

 

元気もらいました^^。

 

てなわけでこれからもググり続けます!!