質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6521閲覧

Pythonを用いたexcelファイル内の罫線の消し方

katsumasa35

総合スコア4

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/04 12:22

前提・実現したいこと

pythonを使ってexcelファイルを移動させると罫線が全て消えてしまうので、
罫線を加えた後、不要な罫線を消したいと考えています。

発生している問題・エラーメッセージ

セルの右側を指定して罫線を消そうとすると、該当のセルの左側の罫線が消えてしまいます。

該当のソースコード

Python

1import openpyxl 2import os 3from openpyxl.styles.borders import Border, Side 4wb3 =openpyxl.load_workbook('file.xlsm', read_only= False, keep_vba= True) 5ws3 =wb3['Sheet1'] 6side = Side(style='thin', color='000000') 7side2 = Side(style='thin', color='FFFFFF') 8border = Border(top=side,bottom=side,left=side,right=side) 9border2 =Border(right=side2) 10for col_num in range(3,50): 11 for row_num in range(3,35): 12 ws3.cell(row=row_num, column=col_num).border= border 13 wb3.save('file2.xlsm') 14 15cell_1 = ws3['C4'] 16cell_1.border= border2 17wb3.save('file2.xlsm')

試したこと

指定のセルの左側の罫線が消えるので、その右のセルを指定してみたところ、
どこの罫線も消えなくなりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2020/11/05 02:05

期待する結果のExcelのスクリーンショットがあるとよいかと思いました。
katsumasa35

2020/11/11 11:01

それは内部文書ですので出せないです。
quickquip

2020/11/11 14:28 編集

回答者が現象を再現できる「コード」を用意すればいいだけでは? というかそうできないならば質問サイトを使うべきではないのでは?
guest

回答1

0

ベストアンサー

border2 =Border(right=side2)ですから、セルの右側にだけ罫線を書く指定になっています。


欲しい結果が示されていないのでエスパー回答ですが

border2 =Border(top=side,bottom=side,left=side) border3 =Border(top=side,bottom=side,right=side) ws3['C4'].border = border2 ws3['D4'].border = border3

でしょうか。


セルの右側の罫線を消すコードであるのに関わらず

そう動いていないことはあなたが自分自身の目で確認していますよね? その事実から目をそらしていませんか?
あなたがどう思って書いたかと、あなたが書いたコードがどう動くかとは関係がありませんよ。

あなたが書いたコードは右側にだけ罫線を書いて上下左の罫線を消すコードになっているんですよ。
だから左が消えるんです。

あなたの目的は、コードの前半で

answer1.xlsx answer1.xlsx

こうなっていたものを

answer2.xlsx answer2.xlsx

こうしたいということではないですか?

この2つのxlsxは以下のコードで出力されます。

python

1from openpyxl import Workbook 2from openpyxl.styles.borders import Border, Side 3 4wb = Workbook() 5ws = wb["Sheet"] 6side = Side(style='thin', color='000000') 7 8border = Border(top=side, bottom=side, left=side, right=side) 9 10for col_num in range(3,50): 11 for row_num in range(3,35): 12 ws.cell(row=row_num, column=col_num).border = border 13 14wb.save('answer1.xlsx') 15 16border2 =Border(top=side, bottom=side, left=side) # 上下左に罫線を引いて右を消す 17border3 =Border(top=side, bottom=side, right=side) # 上下右に罫線を引いて左を消す 18 19ws['C4'].border = border2 # 上下左に罫線を引いて右を消す 20ws['D4'].border = border3 # 上下右に罫線を引いて左を消す 21 22wb.save('answer2.xlsx')

投稿2020/11/05 00:07

編集2020/11/12 12:04
quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katsumasa35

2020/11/11 11:06

border = Border(top=side,bottom=side,left=side,right=side) でセル全体に黒色の罫線を引き、 border2 =Border(right=side2) でセルの右側に白色で罫線を書こうとしています。 罫線を消しているわけではないので、消す方法などをご存じであれば教えていただきたいです。
quickquip

2020/11/11 15:00

> 消す方法などをご存じであれば 質問に書いてあるコードが「消す方法」そのものなのでは。ご自分で「該当のセルの左側の罫線が消えてしまいます」と言っていますよね。
katsumasa35

2020/11/16 01:38 編集

セルの右側を消すようにコードをうっているのに、セルの左側が消えるので質問したのでは? セルの右側の罫線を消すコードであるのに関わらず、左側の罫線が消えるので質問したんですけど、その点理解できてます?
quickquip

2020/11/12 12:07

期待する結果が違っているのでしたら、欲しい結果をちゃんと質問に書いてください(2度目)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問