質問: month_current.strftime('%Y%m') + '_' + '勤怠管理表.xlsx' wb.save(file_new) ``` ーーーエラー内容ーーー ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/61f7004e693b0cd729c215cbe1a1342c.png)
回答: "結合されたセル"の一番左上**以外**のセル(=結合されて値が入らないセル)の情報を取得すると`MergedCell`という型になっています。 MergedCell' object attribute 'value' is read-only というエラーコードを**読んで分かる**通り、そのMergedCell型のvalue属性は読み出し専用であって書き込みはできません。 例としてA1とB1が結合されているとすると、そこに表示されている値を持っているのはA1のセルで、B1のセルではありません。 ここで"B1のセルの値を書き換える"というコードが実行された時、そのコードを書いた人の意思が"A1セルの値を変えたかった"のか"B1セルの値を**誤って**変えようとした"のか、**あいまいなので**フェイルファストとしてエラーを返すのは自然な設計だと思います。 コードが**読めません**ので質問者さんがどういうつもりでコードを書いたのか分かりません。 結合されて値を書き込めないセルかどうか、型をチェックしてMergedCell型ならその処理を飛ばす とか セルが結合されている事実の方が意図していないことなのでExcelシートを直す とか そういったことになるかと思いますが。 (追記) どのセルがマージされているかという情報は、ワークシートの`merged_cells.ranges`に入っています。 対象にしているセルがどうマージされていて書き換えるにはどこのセルの値を変えればいいか? を知るにはそこから地道に探索するしかないでしょう。 セルの方にはスタイルに関係する情報だけがあって、どのようにマージされているかという情報はありません。 (xlsxファイルのつくりがそうなっているという話です) 参考 MergedCellはスタイルに関連する情報だけしかない ワークシートのmerged_cells.rangesを使えという指示 ワークシートのmerged_cellsのクラス python - How to detect merged cells in excel with openpyxl - Stack Overflow