【Java】Word文書内の変数の追加、変更、削除

Word文書の変数は、文書の特定のテキストを動的に編集するために使用することができる特別な文書フィールドです。変数は、テキストの追加、編集、置換、削除など、特定のテキストの管理を容易にする優れたツールです。検索と置換の機能と比較すると、変数は特定のテキストの修正を簡単かつ正確に行うことができます。この記事では、無料の[Free Spire.Doc for Java](https://jp.e-iceblue.com/introduce/free-spire-doc-for-java.html)を使用して、**Word文書に変数を追加、編集、または削除する方法**を紹介する予定です。
- **[Word文書に変数を追加する](#word文書に変数を追加する)**
- **[Word文書の変数を変更する](#word文書の変数を変更する)**
- **[Word文書から変数を削除する](#word文書から変数を削除する)**

### 【依存関係の追加】
この記事の方法は、無料のWord文書処理Java API、Free Spire.Doc for Javaが必要です。このAPIは、[公式サイト](https://jp.e-iceblue.com/download/free-spire-doc-for-java.html)からダウンロードするか、Mavenでプロジェクトに導入することができます。Mavenのコードは以下の通りです。
```xml
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc.free</artifactId>
        <version>5.2.0</version>
    </dependency>
</dependencies>
```

## Word文書に変数を追加する
Spire.Doc for Javaでは、Word文書の段落に変数を挿入する **Paragraph.appendField()** メソッドと、変数に値を割り当てる **VariableCollection.add()** メソッドを提供しています。以下は、変数の挿入の詳細な手順です。
**ステップ 1**
Documentのオブジェクトを作成します。
```Document document = new Document();```
**ステップ 2**
ドキュメントにセクションを追加します。
```Section section = document.addSection();```
**ステップ 3**
セクションに段落を追加します。
```Paragraph paragraph = section.addParagraph();```
**ステップ 4**
段落に変数フィールドを追加します。
```Paragraph.appendField();```
**ステップ 5**
変数コレクションを取得します。
```VariableCollection variableCollection = document.getVariables();```
**ステップ 6**
変数に値を割り当てます。
```VariableCollection.add();```
**ステップ 7**
変数のフィールドを更新します。
```Document.isUpdateFields()```
**ステップ 8**
ドキュメントを保存します。
```Document.saveToFile()```

**以下は、完全なコード例です。**
```java
import com.spire.doc.*;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.formatting.CharacterFormat;

public class AddVariables {
    public static void main(String[] args) {

        //Documentのオブジェクトを作成する
        Document document = new Document();

        //セクションを追加する
        Section section = document.addSection();

        //段落を追加する
        Paragraph paragraph = section.addParagraph();

        //テキスト書式を設定する
        CharacterFormat characterFormat = paragraph.getStyle().getCharacterFormat();
        characterFormat.setFontName("BIZ UDPGothic");
        characterFormat.setFontSize(12);

        //ページの余白を設定する
        section.getPageSetup().getMargins().setTop(100f);

        //段落に変数フィールドを追加する
        paragraph.appendField("物理用語", FieldType.Field_Doc_Variable);
        paragraph.appendText("は物体である。\r\n");
        paragraph.appendField("物理用語", FieldType.Field_Doc_Variable);
        paragraph.appendText("は背景でも錯覚でも創発現象でもない。\r\n");
        paragraph.appendField("物理用語", FieldType.Field_Doc_Variable);
        paragraph.appendText("には、研究所で測定できる物理的なサイズがあります。");

        //変数コレクションを取得する
        VariableCollection variableCollection = document.getVariables();

        //変数に値を割り当てる
        variableCollection.add("物理用語", "時間");

        //文書内のフィールドを更新する
        document.isUpdateFields(true);

        //文書を保存する
        document.saveToFile("変数の追加.docx", FileFormat.Auto);
        document.dispose();
    }
}
```
**【結果文書】**
![Word文書に変数を追加する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/db732bc9-d21c-eaea-5321-17ebfba5e3e7.png)

## Word文書の変数を変更する
Spire.Doc for Javaが提供する **VariableCollection.set()** メソッドを用いて変数の値を変更することで、その変数が文書中に現れる全ての位置のテキストを変更することができ、高速かつ正確なテキスト置換という目的を達成できます。以下、詳しい手順をご紹介します。
**ステップ 1**
Documentのオブジェクトを作成します。
```Document document = new Document();```
**ステップ 2**
Word文書を読み込みます。
```Document.loadFromFile();```
**ステップ 3**
文書中の変数をコレクションとして取得します。
```VariableCollection variableCollection = document.getVariables();```
**ステップ 4**
変数の値を変更します。
```VariableCollection.set();```
**ステップ 5**
文書内のフィールドを更新します。
```Document.isUpdateFields(true);```
**ステップ 6**
文書を保存します。
```Document.saveToFile();```

**以下は、完全なコード例です。**
```java
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.VariableCollection;

public class ChangeVariableValue {
    public static void main(String[] args) {

        //Documentのオブジェクトを作成する
        Document document = new Document();

        //Word文書を読み込む
        document.loadFromFile("変数の追加.docx");

        //文書内の変数を取得する
        VariableCollection variableCollection = document.getVariables();

        //変数の値を設定する
        variableCollection.set("物理用語", "時");

        //文書内のフィールドを更新する
        document.isUpdateFields(true);

        //文書を保存する
        document.saveToFile("変数の値を変更.docx", FileFormat.Auto);
        document.dispose();
    }
}
```
**【結果文書】**
![Word文書の変数を変更する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/a5b33d4b-fd8a-e6b9-bd07-2c59dd8cf71a.png)

## Word文書から変数を削除する
同様に、Spire.Doc for Javaが提供する **VariableCollection.remove()** メソッドで変数を削除すると、その変数が出現するすべての場所のテキストも削除されます。詳しい手順は以下の通りです。
**ステップ 1**
Documentのオブジェクトを作成します。
```Document document = new Document();```
**ステップ 2**
Word文書を読み込みます。
```Document.loadFromFile();```
**ステップ 3**
文書中の変数をコレクションとして取得します。
```VariableCollection variableCollection = document.getVariables();```
**ステップ 4**
変数をその名前で削除します。
```VariableCollection.remove();```
**ステップ 5**
文書内のフィールドを更新します。
```Document.isUpdateFields(true);```
**ステップ 6**
文書を保存します。
```Document.saveToFile();```

**以下は、完全なコード例です。**
```java
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.VariableCollection;

public class RemoveVariable {
    public static void main(String[] args) {

        //Documentのオブジェクトを作成する
        Document document = new Document();

        //Word文書を読み込む
        document.loadFromFile("変数の追加.docx");

        //文書内の変数を取得する
        VariableCollection variableCollection = document.getVariables();

        //変数をその名前で削除する
        variableCollection.remove("物理用語");

        //文書内のフィールドを更新する
        document.isUpdateFields(true);

        //文書を保存する
        document.saveToFile("変数の削除.docx", FileFormat.Auto);
        document.dispose();
    }
}
```
**【結果文書】**
![Word文書から変数を削除する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/0974adc5-f25d-fe4d-7e91-2bd74537ead7.png)

> **注意点としては、変数の追加、変更、削除を行った後に、文書フィールドを更新する必要があることです。 これは、変更した結果が文書に表示されるようにするためです。**

> **以上、Word文書で変数を追加・変更・削除する方法を紹介しました。Spire.Doc for Javaは、他にも様々な文書処理機能をサポートしていますので、詳しくは[Spire.Doc for Javaのチュートリアル](https://jp.e-iceblue.com/tutorials/java/spire-doc-java/doc-java-program-guide-content.html)をご覧ください。**

> **記事推薦**
**[Word文書の結合](https://jp.e-iceblue.com/tutorials/java/spire-doc-java/doc-java-document-operation/java-merge-word-documents.html)**
**[2つのWord文書の比較](https://jp.e-iceblue.com/tutorials/java/spire-doc-java/doc-java-document-operation/java-compare-two-word-documents.html)**