チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.Doc for .NET»ハイパーリンク»C#:Word 文書からハイパーリンクを抽出する方法
2025-03-24

C#:Word 文書からハイパーリンクを抽出する方法

Word 文書を扱う際、ハイパーリンクを一括抽出することは実用的な用途が多くあります。技術文書や製品マニュアルから手動で URL を抽出するのは非効率であり、抜けや誤りが発生しやすいです。これを解決するため、本記事では C# を使用し、文書要素を解析することでハイパーリンクのアンカーテキスト、対応する URL、およびヒントを正確に抽出する自動化ソリューションを紹介します。抽出したハイパーリンクデータは、データ分析、SEO 最適化などの用途に活用できます。

以下のセクションでは、Spire.Doc for .NET を使用して C# で Word 文書からハイパーリンクを抽出する方法を解説します。

Spire.Doc for .NET をインストールします

まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.Doc

C# で Word 文書内のすべてのハイパーリンクを抽出する

Word 文書では、ハイパーリンクはフィールドとして格納されています。これを抽出するには、まずすべてのフィールドオブジェクトを特定し、それぞれのオブジェクトが Field クラスのインスタンスであるかを確認します。その後、Field オブジェクトの Type プロパティが FieldType.FieldHyperlink に等しいかをチェックすることで、ハイパーリンクフィールドを抽出できます。

ハイパーリンクを特定した後、Field.FieldText プロパティを使用してハイパーリンクのアンカーテキストを取得し、Field.GetFieldCode() メソッドを使用して以下の形式のフィールドコードを取得できます。

ハイパーリンクの種類 フィールドコードの例
標準ハイパーリンク HYPERLINK "https://www.example.com/example"
ヒント付きハイパーリンク HYPERLINK "https://www.example.com/example" \o "ScreenTip"

フィールドコードを解析することで、ハイパーリンクの URL とヒントのテキストを取得でき、完全なハイパーリンク情報を抽出できます。

C# を使用して Word 文書からすべてのハイパーリンクを抽出する手順

  • Document オブジェクトを作成し、Document.LoadFromFile() メソッドを使用して対象の Word 文書を読み込みます。
  • foreach (Section section in doc.Sections) を使用して、文書内のすべてのセクションを反復処理し、各 Section オブジェクトを取得します。
  • 各セクションの子オブジェクトを foreach (DocumentObject secObj in section.Body.ChildObjects) で反復処理し、個々の要素にアクセスします。
  • 子オブジェクトが Paragraph 型の場合:
    • 段落内の子オブジェクトを foreach (DocumentObject paraObj in paragraph.ChildObjects) で反復処理します。
  • 段落の子オブジェクトが Field 型であり、その Field.Type プロパティの値が FieldType.FieldHyperlink に等しい場合、Field オブジェクトを処理します。
  • Field オブジェクトに対して:
    • Field.FieldText プロパティを使用してアンカーテキストを抽出します。
    • Field.GetFieldCode() メソッドを使用してフィールドコード文字列を取得します。
  • フィールドコード文字列を解析します:
    • "HYPERLINK" の後にある二重引用符内の URL を抽出します。
    • フィールドコードに \o パラメータが含まれているかを確認し、存在する場合は二重引用符内のヒントテキストを抽出します。
  • 抽出したハイパーリンクを保存し、出力ファイルに書き込みます。
  • C#
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

namespace ExtractWordHyperlink
{
    class Program
    {
        static void Main(string[] args)
        {
            // ドキュメントのインスタンスを作成
            Document doc = new Document();
            // Word ドキュメントを読み込む
            doc.LoadFromFile("Sample.docx");

            // ハイパーリンク情報を格納するための文字列リストを作成
            List<string> hyperlinkInfoList = new List<string>();

            // ドキュメント内のセクションを反復処理
            foreach (Section section in doc.Sections)
            {
                // セクション内の子オブジェクトを反復処理
                foreach (DocumentObject secObj in section.Body.ChildObjects)
                {
                    // 現在のドキュメントオブジェクトが段落インスタンスか確認
                    if (secObj is Paragraph paragraph)
                    {
                        // 段落内の子オブジェクトを反復処理
                        foreach (DocumentObject paraObj in paragraph.ChildObjects)
                        {
                            // 現在の子オブジェクトがフィールドか確認
                            if (paraObj is Field field && field.Type == FieldType.FieldHyperlink)
                            {
                                string hyperlinkInfo = "";
                                // アンカーテキストを取得
                                string anchorText = field.FieldText;

                                // フィールドコードを取得
                                string fieldCode = field.GetFieldCode();
                                // フィールドコードからURLを取得
                                string url = fieldCode.Split('"')[1];
                                // ScreenTip があるか確認
                                if (fieldCode.Contains("\\o"))
                                {
                                    // ヒント テキストを取得
                                    string screenTip = fieldCode.Split("\"")[3].Trim();
                                    // 情報を統合
                                    hyperlinkInfo += $"アンカーテキスト: {anchorText}\nURL: {url}\nヒント: {screenTip}";
                                }
                                else
                                {
                                    hyperlinkInfo += $"アンカーテキスト: {anchorText}\nURL: {url}";
                                }
                                hyperlinkInfo += "\n";
                                // ハイパーリンク情報をリストに追加
                                hyperlinkInfoList.Add(hyperlinkInfo);
                            }
                        }
                    }
                }
            }

            // 抽出したハイパーリンク情報をテキストファイルに書き込む
            File.WriteAllLines("output/抽出したハイパーリンク.txt", hyperlinkInfoList);

            doc.Close();
        }
    }
}

C#でWord文書から抽出したハイパーリンク

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Read 42 times