PythonでWord文書を管理する：コメントの追加、削除、返信

Word文書において、コメントはコラボレーションやフィードバックのための重要なツールです。 アイデアの共有、既存のコメントへの返信、古いフィードバックの削除など、その目的が何であれ、Word文書のコメントの効率的な取り扱いをマスターすることで、文書のワークフローを大幅に向上させることができます。 この記事の目的は、Pythonプログラムで[Spire.Doc for Python](https://www.e-iceblue.com/Introduce/doc-for-python.html)を使用して**Word文書にコメントを追加、削除、返信する方法**を説明することです。

- **[Pythonを使用してWord文書にコメントを追加する方法](#pythonを使用してword文書にコメントを追加する方法)**
- **[Pythonを使用してWord文書からコメントを削除する方法](#pythonを使用してWord文書からコメントを削除する方法)**
- **[Pythonを使用してWord文書のコメントに返信する方法](#pythonを使用してword文書のコメントに返信する方法)**

----

このチュートリアルにはSpire.Doc for Pythonが必要です。Spire.Doc for Pythonは[公式ウェブサイト](https://www.e-iceblue.com/Download/Spire-Doc-Python.html)からダウンロードするか、pip経由でインストールすることができます：
```powershell
pip install Spire.Doc
```

## Pythonを使用してWord文書にコメントを追加する方法
Spire.Doc for Pythonは、Word文書内のコメントを表す**Comment**クラスを提供します。このクラスのオブジェクトを作成し、特定のテキストに追加することで、そのテキストにコメントを付けることができます。また、コメントの開始マークと終了マークを使用して、コメントに対応するテキストの範囲を制御する必要があります。段落にコメントを追加する詳しい手順は以下の通りです：
- **Document**クラスのオブジェクトを作成し、**Document.LoadFromFile()** メソッドを使用してWord文書を読み込みます。
- **Document.FindString()** メソッドを使用して、コメントするテキストを見つけます。
- **Comment**クラスのオブジェクトを作成し、**Comment.Body.AddParagraph().Text**プロパティでコメント内容を設定し、**Comment.Format.Author**プロパティでコメントの作成者を設定します。
- **TextSelection.GetAsOneRange()** メソッドでテキストを1つのテキスト範囲として取得し、**TextRange.OwnerParagraph**プロパティでテキストが属する段落を取得します。
- 見つかったテキストの後に、**Paragraph.ChildObjects.Insert()** メソッドを使ってコメントを挿入します。
- コメントの開始マークと終了マークを作成し、**CommentMark.CommentId**プロパティで作成したコメントの開始マークと終了マークに設定します。
- **Paragraph.ChildObjects.Insert()** メソッドを使用して、コメントの開始マークと終了マークをそれぞれ作成したテキストの前後に挿入します。
- **Document.SaveToFile()** メソッドを使用してドキュメントを保存します。

**Python**
```python
from spire.doc import *
from spire.doc.common import *

# Document クラスのオブジェクトを作成し、Word ドキュメントを読み込む
doc = Document()
doc.LoadFromFile("サンプル.docx")

# コメントを追加するテキストを検索する
text = doc.FindString("交換手段", True, True)

# コメントオブジェクトを作成し、コメントの内容と作者を設定する
comment = Comment(doc)
comment.Body.AddParagraph().Text = "交換手段には、商品交換、信用取引、資産交換も含まれる。"
comment.Format.Author = "リンダ"

# テキストをテキスト範囲として取得し、その所属段落を取得する
range = text.GetAsOneRange()
paragraph = range.OwnerParagraph

# コメントを段落に追加する
paragraph.ChildObjects.Insert(paragraph.ChildObjects.IndexOf(range) + 1, comment)

# コメント開始マークと終了マークを作成し、作成したコメントの開始マークと終了マークに設定する
commentStart = CommentMark(doc, CommentMarkType.CommentStart)
commentEnd = CommentMark(doc, CommentMarkType.CommentEnd)
commentStart.CommentId = comment.Format.CommentId
commentEnd.CommentId = comment.Format.CommentId

# テキストの前後に作成したコメント開始マークと終了マークを挿入する
paragraph.ChildObjects.Insert(paragraph.ChildObjects.IndexOf(range), commentStart)
paragraph.ChildObjects.Insert(paragraph.ChildObjects.IndexOf(range) + 1, commentEnd)

# ドキュメントを保存する
doc.SaveToFile("output/コメントの追加.docx")
doc.Close()
```

**結果の文書**

![Python Word文書にコメントを追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/963dc881-d710-7d74-f460-e113cca6a464.png)

## Pythonを使用してWord文書からコメントを削除する方法
Spire.Doc for Pythonには、指定したコメントを削除する **Document.Comments.RemoveAt()** メソッドと、すべてのコメントを削除する **Document.Clear()** メソッドがあります。コメントを削除する詳しい手順は以下の通りです：
- **Document**クラスのオブジェクトを作成し、**Document.LoadFromFile()** メソッドを使用してWordドキュメントをロードします。
- **Document.Comments.RemoveAt()** メソッドで特定のコメントを削除するか、**Document.Comments.Clear()** メソッドですべてのコメントを削除する。
- **Document.SaveToFile()** メソッドを使用してドキュメントを保存します。

**Python**
```python
from spire.doc import *
from spire.doc.common import *

# Document クラスのオブジェクトを作成し、Word ドキュメントを読み込む
doc = Document()
doc.LoadFromFile("サンプル1.docx")

# 1番目のコメントを削除する
#doc.Comments.RemoveAt(0)

# すべてのコメントを削除する
doc.Comments.Clear()

# ドキュメントを保存する
doc.SaveToFile("output/コメントの削除.docx")
doc.Close()
```

## Pythonを使用してWord文書のコメントに返信する方法
Spire.Doc for Pythonでは、**Comment.ReplyToComment(Comment)** メソッドを使用して、コメントを他のコメントへの返信として設定することで、ユーザーがコメントに返信することができます。詳しい手順は以下の通りです：
- **Document**クラスのオブジェクトを作成し、**Document.LoadFromFile()** メソッドを使用してWord文書を読み込みます。
- **Document.Comments.get_Item()** メソッドを使用してコメントを取得します。
- コメントを作成し、**Comment.Body.AddParagraph().Text**プロパティと**Comment.Format.Author**プロパティでその内容と作者を設定します。
- **Comment.ReplyToComment()** メソッドを使用して、作成したコメントを取得したコメントへの返信として設定します。
- **Document.SaveToFile()** メソッドを使用してドキュメントを保存します。

**Python**
```python
from spire.doc import *
from spire.doc.common import *

# Document クラスのオブジェクトを作成し、Word ドキュメントを読み込む
doc = Document()
doc.LoadFromFile("output/テキストへのコメント.docx")

# コメントを取得する
comment = doc.Comments.get_Item(0)

# 返信コメントを作成し、内容と作者を設定する
reply = Comment(doc)
reply.Body.AddParagraph().Text = "記事に関連する内容を追加していく予定です。"
reply.Format.Author = "モリー"

# 作成したコメントを取得したコメントに返信コメントとして設定する
comment.ReplyToComment(reply)

# ドキュメントを保存する
doc.SaveToFile("output/コメントへの返信.docx")
doc.Close()
```

**結果の文書**

![Python Word文書のコメントに返信](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/b2c74c2c-5242-960b-56a8-6cc199cfdc2f.png)

> **Pythonを使ってWord文書にコメントを追加、削除、返信する方法の紹介です。 Spire.Doc for Pythonの使い方については、[Spire.Doc for Pythonチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.Doc-for-Python/Program-Guide/Spire.Doc-for-Python-Program-Guide-Content.html)をご覧ください。 また、[Spire.Docフォーラム](https://www.e-iceblue.com/forum/spire-doc-f6.html)でディスカッションに参加することもできます。**