現在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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。