teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

追記

2020/11/04 15:42

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -11,4 +11,19 @@
11
11
  とか
12
12
  セルが結合されている事実の方が意図していないことなのでExcelシートを直す
13
13
  とか
14
- そういったことになるかと思いますが。
14
+ そういったことになるかと思いますが。
15
+
16
+ ----
17
+ (追記)
18
+
19
+ どのセルがマージされているかという情報は、ワークシートの`merged_cells.ranges`に入っています。
20
+ 対象にしているセルがどうマージされていて書き換えるにはどこのセルの値を変えればいいか? を知るにはそこから地道に探索するしかないでしょう。
21
+ セルの方にはスタイルに関係する情報だけがあって、どのようにマージされているかという情報はありません。
22
+ (xlsxファイルのつくりがそうなっているという話です)
23
+
24
+ 参考
25
+ [MergedCellはスタイルに関連する情報だけしかない](https://openpyxl.readthedocs.io/en/stable/api/openpyxl.cell.cell.html#openpyxl.cell.cell.MergedCell)
26
+ [ワークシートのmerged_cells.rangesを使えという指示](https://openpyxl.readthedocs.io/en/stable/api/openpyxl.worksheet.worksheet.html#openpyxl.worksheet.worksheet.Worksheet.merged_cell_ranges)
27
+ [ワークシートのmerged_cellsのクラス](https://openpyxl.readthedocs.io/en/stable/api/openpyxl.worksheet.cell_range.html#openpyxl.worksheet.cell_range.MultiCellRange)
28
+
29
+ [python - How to detect merged cells in excel with openpyxl - Stack Overflow](https://stackoverflow.com/questions/39574991/how-to-detect-merged-cells-in-excel-with-openpyxl)

4

2020/11/04 15:42

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  というエラーコードを**読んで分かる**通り、そのMergedCell型のvalue属性は読み出し専用であって書き込みはできません。
5
5
 
6
6
  例としてA1とB1が結合されているとすると、そこに表示されている値を持っているのはA1のセルで、B1のセルではありません。
7
- ここで"B1のセルの値を書き換える"というコードが実行された時、そのコードを書いた人の意思が"A1セルの値を変えたかった"のか"B1セルの値を**誤って**変えようとした"のか、**あいまいなので**フェイルファストとしてエラーを返すのは自然な設計だと思います。
7
+ ここで"B1のセルの値を書き換える"というコードが実行された時、そのコードを書いた人の意思が"A1セルの値を変えたかった"のか"B1セルの値を**誤って**変えようとした"のか、**あいまいなので**フェイルファストとしてエラーを返すのは自然な設計だと思います。
8
8
 
9
9
  コードが**読めません**ので質問者さんがどういうつもりでコードを書いたのか分かりません。
10
10
  結合されて値を書き込めないセルかどうか、型をチェックしてMergedCell型ならその処理を飛ばす

3

フェイルファストの間違いでした

2020/11/04 00:59

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  というエラーコードを**読んで分かる**通り、そのMergedCell型のvalue属性は読み出し専用であって書き込みはできません。
5
5
 
6
6
  例としてA1とB1が結合されているとすると、そこに表示されている値を持っているのはA1のセルで、B1のセルではありません。
7
- ここで"B1のセルの値を書き換える"というコードが実行された時、そのコードを書いた人の意思が"A1セルの値を変えたかった"のか"B1セルの値を**誤って**変えようとした"のか、**あいまいなので**フェイルセーフとしてエラーを返すのは自然な設計だと思います。
7
+ ここで"B1のセルの値を書き換える"というコードが実行された時、そのコードを書いた人の意思が"A1セルの値を変えたかった"のか"B1セルの値を**誤って**変えようとした"のか、**あいまいなので**フェイルファーストとしてエラーを返すのは自然な設計だと思います。
8
8
 
9
9
  コードが**読めません**ので質問者さんがどういうつもりでコードを書いたのか分かりません。
10
10
  結合されて値を書き込めないセルかどうか、型をチェックしてMergedCell型ならその処理を飛ばす

2

些細

2020/11/04 00:58

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  ここで"B1のセルの値を書き換える"というコードが実行された時、そのコードを書いた人の意思が"A1セルの値を変えたかった"のか"B1セルの値を**誤って**変えようとした"のか、**あいまいなので**フェイルセーフとしてエラーを返すのは自然な設計だと思います。
8
8
 
9
9
  コードが**読めません**ので質問者さんがどういうつもりでコードを書いたのか分かりません。
10
- 結合されて値を書き込めないセルかどうか、型をチェックしてMergedCell型ならその処理を飛ばす
10
+ 結合されて値を書き込めないセルかどうか、型をチェックしてMergedCell型ならその処理を飛ばす
11
11
  とか
12
12
  セルが結合されている事実の方が意図していないことなのでExcelシートを直す
13
13
  とか

1

間違い

2020/11/04 00:26

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -7,8 +7,8 @@
7
7
  ここで"B1のセルの値を書き換える"というコードが実行された時、そのコードを書いた人の意思が"A1セルの値を変えたかった"のか"B1セルの値を**誤って**変えようとした"のか、**あいまいなので**フェイルセーフとしてエラーを返すのは自然な設計だと思います。
8
8
 
9
9
  コードが**読めません**ので質問者さんがどういうつもりでコードを書いたのか分かりません。
10
- 結合されて値を書き込めないセルかどうかを、型かどうかをチェックしてMergedCell型ならその処理を飛ばす
10
+ 結合されて値を書き込めないセルかどうかを、型をチェックしてMergedCell型ならその処理を飛ばす
11
11
  とか
12
- が結合されているのが意図していないことなのでExcelシートを直す
12
+ セルが結合されている事実が意図していないことなのでExcelシートを直す
13
13
  とか
14
14
  そういったことになるかと思いますが。