【C#】C#からWordファイルに存在する表の数をカウントするには

この記事では、C#からWordファイルに存在する表の数をカウントする方法についてご説明します。

【動画】C#からWordファイルに存在する表の数をカウントする実際の動き

本題に入る前に、まずは次の動画をご覧ください。


Wordアプリケーションのインスタンスを生成し、Wordファイルを開きます。

Wordファイルを開いたら、Wordファイル内にある表を探して、いくつあるかをカウントします。

今回はカウントした値をテキストボックスに出力しています。

参照設定が必要

今回のコードを実行するのに参照設定が必要です。

今回は以下の参照設定を行います。

  1. Microsoft.Office.Interop.Word(Microsoft.Office.Interop.Word.dll)
  2. System.Configuration(System.Configuration.dll)

①Microsoft.Office.Interop.Word(Microsoft.Office.Interop.Word.dll)

Microsoft.Office.Interop.Wordを参照設定すると、Wordファイルに対して様々な操作を行うことができるようになります。

今回はWordファイルから表のデータを取得するので、この参照設定が必要になります。

②System.Configuration(System.Configuration.dll)

System.Configurationを参照設定すると、アプリケーションの設定をapp.configのような外部の設定ファイルに分けることができ、コンパイルの必要が無く設定値を変更することができるようになります。

System.Configurationを参照設定しないと、「ConfigurationManager」が存在しないとのことでエラーになってしまうので、この参照設定が必要になります。

コードの流れ

STEP.1
必要な名前空間をインポートする
必要な名前空間をインポートします。
インポートする名前空間には、Word操作や設定情報の取得などがあります。
STEP.2
Wordファイルを開く
Wordファイルを開きます。
STEP.3
Wordファイルにある表を探して何件あるかカウントする
Wordファイルにある表を探して何件あるかカウントします。
今回は件数をテキストボックスに出力しています。
STEP.4
Wordファイルを閉じる
Wordファイルを閉じます。
STEP.5
COMオブジェクトへの参照を解放する
COMオブジェクトへの参照を解放します。

WordファイルとC#のフォームの例

Wordファイル

今回は下のWordファイルを用意しました。

Wordファイルには表が3つ存在しています。

C#のフォーム

今回は下のC#のフォームを用意しました。

フォームにある「実行」ボタンをクリックすると、下のとおりWordの表の件数がテキストボックスに出力されます。

Wordファイルには表が3つあるので、テキストボックスに3の値が出力されています。

C#のコード(例)

App.configのコード

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<startup>
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
	</startup>
	<appSettings>
		<!-- Wordファイルのフルパス -->
		<add key="wdFilePath" value="C:\work\10_勉強\21_C#\0075\0075.docx" />
	
	</appSettings>
</configuration>

注目すべきコード

見て頂きたいのは8行目です。

8行目は、Wordファイルのフルパスを「wdFilePath」というキーに設定しているコードです。

「wdFilePath」のキーの値をフォーム側のコードが参照して使います。

ちなみに、今回扱うWordファイルは下の画像のファイルです。(C:\work\10_勉強\21_C#\0075\0075.docx)

フォームのコード

using System;
using System.Windows.Forms;
using System.Configuration;
using Application = Microsoft.Office.Interop.Word.Application;

namespace wfcs_0075
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // App.configのappSettingsタグ内に記述した「wdFilePath」のキーの値を取得して変数「wdFilePath」に格納する
            string wdFilePath = ConfigurationManager.AppSettings["wdFilePath"];

            // Wordアプリケーションのインスタンスを生成する
            Application wordApp = new Application();

            // Wordファイルを開く
            var document = wordApp.Documents.Open(wdFilePath);

            // Wordファイルにある表の数をカウントしてテキストボックスに出力する
            txb_cntNum.Text = document.Tables.Count.ToString();

            // Wordファイルを閉じる
            document.Close(false);

            // Wordアプリケーションを終了する
            wordApp.Quit();

            // documentインスタンスのリソースを解放する
            System.Runtime.InteropServices.Marshal.ReleaseComObject(document);

            // Wordアプリケーションオブジェクトのリソースを解放する
            System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
        }
    }
}

注目すべきコード①

最初に見て頂きたいのは1行目から4行目です。

using System;
using System.Windows.Forms;
using System.Configuration;
using Application = Microsoft.Office.Interop.Word.Application;

コードの説明

以上のコードは、必要な名前空間の使用宣言およびエイリアス宣言のコードです。

コードの詳細

1行目は、.NET Frameworkの基本クラスのセットを参照する名前空間です。

2行目は、ウィンドウやダイアログボックスを使う名前空間です。

3行目は、アプリケーションの実行時設定やカスタム設定を読み込み、保存することができる名前空間です。

アプリケーションの設定をapp.configのような外部の設定ファイルに分けることができ、コンパイルの必要が無く設定値を変更することができるようになります。

4行目は、Microsoft.Office.Interop.Word.Applicationクラスに対してApplicationという名前を定義しています。

注目すべきコード②

次に見て頂きたいのは18行目です。

            // App.configのappSettingsタグ内に記述した「wdFilePath」のキーの値を取得して変数「wdFilePath」に格納する
            string wdFilePath = ConfigurationManager.AppSettings["wdFilePath"];

コードの説明

以上のコードは、App.configのappSettingsタグ内に記述した「wdFilePath」のキーの値を取得して変数に格納するコードです。

「wdFilePath」のキーの値は変数「wdFilePath」に格納します。

注目すべきコード③

次に見て頂きたいのは21行目から27行目です。

            // Wordアプリケーションのインスタンスを生成する
            Application wordApp = new Application();

            // Wordファイルを開く
            var document = wordApp.Documents.Open(wdFilePath);

            // Wordファイルにある表の数をカウントしてテキストボックスに出力する
            txb_cntNum.Text = document.Tables.Count.ToString();

コードの説明

以上のコードは、Wordアプリケーションのインスタンスを生成してWordファイルを開き、Wordファイルにある表の数をカウントしてテキストボックスに出力するコードです。

コードの詳細

21行目のコードでは、Wordアプリケーションのインスタンスを生成しています。

このインスタンスを生成することで、Wordの操作(Wordファイルを開く、閉じるなど)を行うことができるようになります。

24行目のコードでWordファイルを開き、27行目でWordファイルにある表の数をカウントしてテキストボックスに出力しています。

注目すべきコード④

次に見て頂きたいのは30行目から33行目です。

            // Wordファイルを閉じる
            document.Close(false);

            // Wordアプリケーションを終了する
            wordApp.Quit();

コードの説明

以上のコードは、Wordファイルを閉じてWordアプリケーションを終了する処理のコードです。

注目すべきコード⑤

次に見て頂きたいのは36行目から39行目です。

            // documentインスタンスのリソースを解放する
            System.Runtime.InteropServices.Marshal.ReleaseComObject(document);

            // Wordアプリケーションオブジェクトのリソースを解放する
            System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);

コードの説明

以上のコードは、documentインスタンスとWordアプリケーションオブジェクトのリソースを解放する処理のコードです。

以上のコードを実行することでリソースの解放を適切に行い、不要なメモリの使用を避けます。

動作確認

「WordファイルとC#のフォームの例」をご覧ください。

最後に

この記事では、C#からWordファイルに存在する表の数をカウントする方法についてご説明しました。

C#からWordファイルに存在する表がいくつあるのか知りたいときは本記事を参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら