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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

2088閲覧

Openpyxlでセル内で複数styleが存在する場合に先頭文字のstyleしかコピーされない

n.kanbe

総合スコア18

openpyxl

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/02/04 05:10

現在PythonのOpenpyxlで書式を含めたセルのコピー、ペーストを実行するコードを作成しています。

試しにインプットファイルのセルA2をアウトプットファイルのセルA2にstyleも含めてセルをコピーする動作を行いましたが、先頭文字のstyleのみコピーされて反映されます。
インプットファイルのA2は先頭3文字文字が赤太字で後半3文字は黒細字ですが、styleをペーストしたアウトプットファイルではセル全体の文字が赤太字になっています。

理想としてはコピー元と同じく前半3文字(テスト)が赤太字、後半3文字(コード)が黒細字でペーストしたいのですが、どのようにすればいいか知恵を貸して頂けないでしょうか。

イメージ説明

実行コードは以下になります。
style周りのコピペ動作は以下のページを参考にしました。
https://stackoverflow.com/questions/23332259/copy-cell-style-openpyxl
https://qiita.com/sky_jokerxx/items/dc9d8827d946b467ba4b

qiitaの方では._styleで全てのstyleが選択できるとのことですが、これを行うとout_wb.save("テスト2.xlsx")でなぜかIndexError: list index out of rangeが発生するため、stackoverflowの通り全styleをコピーする形にしました。
またcopy()メソッドを使用しないとTypeError: unhashable type: 'StyleProxy'とエラーが発生したため、copyメソッドを使用しています。

Python

1import openpyxl 2from copy import copy 3 4wb = openpyxl.load_workbook("テスト.xlsx") 5ws = wb.worksheets[0] 6 7out_wb = openpyxl.Workbook() 8out_ws = out_wb.worksheets[0] 9 10out_ws["A2"].value = copy(ws["A2"].value) 11 12out_ws["A2"].font = copy(ws["A2"].font) 13out_ws["A2"].border = copy(ws["A2"].border) 14out_ws["A2"].fill = copy(ws["A2"].fill) 15out_ws["A2"].number_format = copy(ws["A2"].number_format) 16out_ws["A2"].protection = copy(ws["A2"].protection) 17out_ws["A2"].alignment = copy(ws["A2"].alignment) 18 19out_wb.save("テスト2.xlsx") 20wb.close()

よろしくお願いいたします。

------環境------
Python: 3.7.4
openpyxl: 3.0.9
Windows10

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

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

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

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

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

guest

回答2

0

現状複数書式での書き込みは可能だが、読み込みは非常に難しいことがわかりました。

投稿2022/02/07 02:44

n.kanbe

総合スコア18

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

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

0

ベストアンサー

投稿2022/02/04 06:07

ppaul

総合スコア24666

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

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

n.kanbe

2022/02/06 23:47

回答ありがとうございます。 参考ページよりXlsxWriterというライブラリを使用すれば書き込みは行えそうですね。 また複数フォント情報の読み込みは難しそうであることがわかりました。 今回の用途では複数フォント情報を読み込む必要があるのでこれが困難である場合はあきらめようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問