Pythonを使ったWord文書の作成、読み取り、および修正

# Pythonを使ったWord文書の作成、読み取り、および修正

ドキュメントの自動化処理は、作業効率を大幅に向上させる重要な手段です。Pythonは、そのシンプルな文法と充実したエコシステムにより、**ドキュメント自動化処理**を実現するための最適なツールとなっています。たとえば、構造化された契約書テンプレートの一括生成、データ分析結果の動的な注入による視覚的なレポート作成、さらには膨大な文書からの重要情報の迅速な抽出など、コードにより駆動されるワークフローは、手作業による反復操作のミスを排除し、文書処理を単なる機械的作業から拡張性のあるインテリジェントなシステムへと進化させます。本記事では、Pythonを用いてWord文書を**作成、読み取り、修正**する方法をご紹介します。

- Pythonを使ったWord文書の作成
- Pythonを使ったWord文書テキストの読み取り
- Pythonを使ったWord文書の修正

本記事で紹介する手法では、無料で利用可能な [Free Spire.Doc for Python](https://jp.e-iceblue.com/introduce/introduce-free-doc-for-python.html) を使用します。PyPIからは以下のコマンドでインストールできます：
`pip install spire.doc.free`

## Pythonを使ったWord文書の作成

まず、`Document` インスタンスを生成してWord文書を作成し、その中にセクション（`Document.AddSection`）、段落（`Section.AddParagraph`）、テキスト（`Paragraph.AppendText`）を追加して、各要素のフォーマットを設定することで、オリジナルなWord文書を生成することができます。以下は、操作手順の一例です：

1. `Document` クラスをインスタンス化してWord文書を作成します。
2. `Document.AddSection()` メソッドを使用して文書にセクションを追加し、`Section.PageSetup` を用いてそのセクションのページ設定をカスタマイズします。
3. `ParagraphStyle` クラスで段落スタイルを作成し、`Document.Styles.Add()` メソッドで文書にスタイルを追加します。
4. `Section.AddParagraph()` メソッドでセクション内に段落を追加します。
5. `Paragraph.ApplyStyle()` メソッドを用いて段落にスタイルを適用します。
6. `Document.SaveToFile()` または `Document.SaveToStream()` メソッドで文書を保存します。
7. 使用したリソースを解放します。

**コード例**
```python
from spire.doc import *

# Documentクラスをインスタンス化してWord文書を作成
doc = Document()

# 文書にセクションを追加
section = doc.AddSection()
# ページの余白を設定
section.PageSetup.Margins.Top = 50
section.PageSetup.Margins.Bottom = 50
section.PageSetup.Margins.Left = 50
section.PageSetup.Margins.Right = 50

# タイトル段落を追加
titleParagraph = section.AddParagraph()
titleParagraph.AppendText("デジタル時代の隠れた一角")
titleParagraph.ApplyStyle(BuiltinStyle.Heading2)

# 本文段落のスタイルを作成
bodyStyle = ParagraphStyle(doc)
bodyStyle.Name = "BodyStyle"
bodyStyle.CharacterFormat.FontName = "Yu Gothic UI"
bodyStyle.CharacterFormat.FontSize = 12
bodyStyle.CharacterFormat.TextColor = Color.get_Brown()
# スタイルを文書に追加
doc.Styles.Add(bodyStyle)

# 本文段落を追加
bodyParagraph = section.AddParagraph()
bodyParagraph.AppendText("この高度にデジタル化された時代、毎秒大量の情報が作成され、共有され、廃棄されています。"
                         "私たちは無数の更新情報を速くスクロールして、最新のトレンドや技術を追いかけることに慣れています。"
                         "しかし、その過程で、多くの貴重な「ネット遺産」が静かに忘れ去られつつあります。"
                         "これらの遺産には、初期のインターネットユーザーの創造作品、運営が停止したオンラインコミュニティの記憶、"
                         "そしてかつて大流行したが今では誰も振り返らないデジタルコンテンツが含まれています。"
                         "それらは単なるデータの残骸ではなく、人類がデジタル領域を探索してきた軌跡の証です。"
                         "これらの忘れられた一角を探ることで、インターネット文化の発展の流れをよりよく理解し、"
                         "未来の革新に役立つ経験と教訓を得ることができます。"
                         "これは過去を振り返るだけでなく、絶え間なく変化するデジタル世界の中で、"
                         "人類の共有する記憶をどのように保存するかについての深い考察でもあります。")
# 本文段落にスタイルを適用
bodyParagraph.ApplyStyle(bodyStyle.Name)

# 文書を保存
doc.SaveToFile("output/Example.docx", FileFormat.Docx2019)
doc.Close()
```

**結果**
![2025-02-07_175732.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/bfc78363-f80c-b7a5-e012-1520a9236b03.png)

---

## Pythonを使ったWord文書テキストの読み取り

既存のWord文書からテキストを文字列として抽出し、他の処理に活用したい場合は、`Document.LoadFromFile` または `Document.LoadFromStream` メソッドで文書を読み込み、`Document.GetText` メソッドで文書内の全テキストを取得することができます。以下は、その操作手順の一例です：

1. `Document` オブジェクトを作成します。
2. `Document.LoadFromFile()` メソッドでファイルから、または `Document.LoadFromStream()` メソッドでストリームからWord文書を読み込みます。
3. `Document.GetText()` メソッドで文書内の全テキストを取得します。
4. 取得したテキストを出力するか、他の処理に利用します。

**コード例**
```python
from spire.doc import Document

# Documentオブジェクトを作成
doc = Document()

# Word文書を読み込む
doc.LoadFromFile("output/Example.docx")

# 文書内のすべてのテキストを文字列として取得
text = doc.GetText()

# 取得した文字列を出力
print(text)
```

**結果**
![2025-02-07_175849.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e4ea2c3e-3272-0f15-b9db-674c5a8c1f1f.png)

---

## Pythonを使ったWord文書の修正

Free Spire.Doc for Pythonを利用すれば、既存のWord文書を読み込み、ライブラリ内の各種クラスやメソッドを用いて直接文書を修正することも可能です。以下は、その操作手順の一例です：

1. `Document` オブジェクトを作成します。
2. `Document.LoadFromFile()` メソッドでファイルから、または `Document.LoadFromStream()` メソッドでストリームからWord文書を読み込みます。
3. `Document.Sections.get_Item()` メソッドで特定のセクションを取得します。
4. `Section.PageSetup` のプロパティを使用してページ設定を変更します。
5. `Section.Paragraphs.get_Item()` メソッドでセクション内の段落を取得します。
6. `Paragraph.Text` プロパティで新しいテキストに更新します。
7. `Paragraph.ApplyStyle()` メソッドを使用して段落のスタイルを変更します。
8. `Document.SaveToFile()` または `Document.SaveToStream()` メソッドで修正済みの文書を保存します。

**コード例**
```python
from spire.doc import Document, BuiltinStyle

# Documentオブジェクトを作成
doc = Document()

# Word文書を読み込む
doc.LoadFromFile("output/Example.docx")

# 文書の最初のセクションを取得
section = doc.Sections.get_Item(0)

# セクションの左右の余白を変更
section.PageSetup.Margins.Left = 100
section.PageSetup.Margins.Right = 100

# セクション内の最初の段落を取得
para = section.Paragraphs.get_Item(0)

# 段落のテキストを変更
para.Text = "忘れられたネット遺産を探る"

# 段落のスタイルを変更
para.ApplyStyle(BuiltinStyle.Heading1)

# 変更後の文書を保存
doc.SaveToFile("output/ModifiedExample.docx")
doc.Close()
```

**結果**
![2025-02-07_180132.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/96939f3e-76b5-11b1-00a1-a855116a4dd8.png)

---

本記事では、Pythonを利用してWord文書の作成、読み取り、修正を行う方法を詳しく解説しました。これにより、Word文書の自動化処理において効率的かつ柔軟なソリューションを実現することができます。