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