回答編集履歴

2

補足を追加

2021/02/07 03:34

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -39,3 +39,39 @@
39
39
  worksheet2.cell(row=row, column=column).comment = cell.comment
40
40
 
41
41
  ```
42
+
43
+
44
+
45
+ ### 補足
46
+
47
+ 最近のExcelで利用できる「スレッド化されたコメント」(名前付きで表示され、返信などが可能)の場合、コピー先のシートにコメント情報はコピーされるものの、スレッド化されたコメントに対応したExcelで開いても、コメントとして表示されない。さらに、Excelで保存操作を行なうと、コメント情報が削除された状態で保存されてしまう。
48
+
49
+
50
+
51
+ 対策として、古い形式のコメント(スレッド化されたコメントに対応したExcelでは、「メモ」と呼ばれる)を適当なauthor名で作成し、コピー先のシートに書き込むコードを示す。
52
+
53
+ コメントのテキストに追加される余分な注意書きの行([スレッド化されたコメント」から「コメント:」まで)を正規表現で置換(削除)しているので、コードの先頭付近に`import re`を追加すること。
54
+
55
+
56
+
57
+ ```Python
58
+
59
+ for row in range(8, 60):
60
+
61
+ for column in range(42, 153):
62
+
63
+ cell = worksheet1.cell(row=row, column=column)
64
+
65
+ if cell.value:
66
+
67
+ worksheet2.cell(row=row, column=column, value=cell.value)
68
+
69
+ if cell.comment and cell.comment.text:
70
+
71
+ comment_text = cell.comment.text
72
+
73
+ comment_text = re.sub(r"^[スレッド化されたコメント]$(?:.|\s)+^コメント:$\n {4}", "", comment_text, flags=re.MULTILINE)
74
+
75
+ worksheet2.cell(row=row, column=column).comment = Comment(comment_text, "anonymous")
76
+
77
+ ```

1

補足を追加

2021/02/07 03:34

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- 内側のforループを以下のように書き換えてください。
21
+ 内側のforループを以下のように書き換えてください。セルに値だけ書いてある場合、コメントだけ書いてある場合、両方書いてある場合すべてに対応します。
22
22
 
23
23
 
24
24