C#を使用してWord文書から埋め込みオブジェクトを抽出する方法

普段PDFやExcelなどのドキュメントをWordドキュメントに挿入する必要がある場合もあれば、逆に、Wordドキュメントから埋め込みオブジェクトを抽出する必要がある場合もあります。この記事で、C#および無料のWordコンポーネント、Free Spire.Doc for .NETを通してWord文書から埋め込みオブジェクトを抽出する方法を紹介します。

 

ここで一つのWord文書を作成して、ExcelとPDFドキュメントを挿入して例にします:

f:id:uha_noki:20211117181733p:plain

これからこのWord文書のExcelテーブルとPDFドキュメントを抽出します。

コード使用:

手順1  Wordドキュメントオブジェクトを初期化してロードします。

Document doc = new Document();

doc.LoadFromFile("Oleobject.docx");

手順2 Wordドキュメントをトラバースし、埋め込みオブジェクトを見つけ、各埋め込みオブジェクトのファイルタイプを取得し、それがPDFドキュメントかExcelドキュメントかを判別します。PDFドキュメントの場合は、埋め込みオブジェクトのデータを新しいPDFドキュメントに書き込みます。Excelドキュメントの場合は、そのデータを新しいExcelドキュメントに書き込みます。

//Wordドキュメントをトラバースする

foreach (Section sec in doc.Sections)

{

    //各セクションの本文にあるすべての子オブジェクトをトラバースする

    foreach (DocumentObject obj in sec.Body.ChildObjects)

    {

        if (obj is Paragraph)

        {

            Paragraph para = obj as Paragraph;

            //段落内のすべての子オブジェクトをトラバースしする

            foreach (DocumentObject o in para.ChildObjects)

            {

                //Oleオブジェクトを見つけて抽出する

                if (o.DocumentObjectType == DocumentObjectType.OleObject)

                {

                    DocOleObject Ole = o as DocOleObject;

                    string s = Ole.ObjectType;

                    //PDFドキュメントの場合

                    if (s == "AcroExch.Document.11")

                    {

                        File.WriteAllBytes("Result.pdf", Ole.NativeData);

                    }

                    //Excelドキュメントの場合

                    else if (s == "Excel.Sheet.12")

                    {

                        File.WriteAllBytes("Result.xlsx",Ole.NativeData);

                    }

                }

            }

        }

    }

}

コードを開始します、以下のPDFおよびExcelドキュメントが出ます:

f:id:uha_noki:20211117181820p:plain

f:id:uha_noki:20211117181854p:plain

完全なるコードは以下のようになります:

using System.IO;

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

namespace ExtractObjectFromWord

{

    class Program

    {

        static void Main(string[] args)

        {

            Document doc = new Document();

            doc.LoadFromFile("Oleobject.docx");

 

            //Wordドキュメントをトラバースする

            foreach (Section sec in doc.Sections)

            {

                //各セクションの本文にあるすべての子オブジェクトをトラバースする

                foreach (DocumentObject obj in sec.Body.ChildObjects)

                {

                    if (obj is Paragraph)

                    {

                        Paragraph para = obj as Paragraph;

                        //段落内のすべての子オブジェクトをトラバースしする

                        foreach (DocumentObject o in para.ChildObjects)

                        {

                            //Oleオブジェクトを見つけて抽出する

                            if (o.DocumentObjectType == DocumentObjectType.OleObject)

                            {

                                DocOleObject Ole = o as DocOleObject;

                                string s = Ole.ObjectType;

                                //PDFドキュメントの場合

                                if (s == "AcroExch.Document.11")

                                {

                                    File.WriteAllBytes("Result.pdf", Ole.NativeData);

                                }

                                //Excelドキュメントの場合

                                else if (s == "Excel.Sheet.12")

                                {

                                    File.WriteAllBytes("Result.xlsx",Ole.NativeData);

                                }

                            }

                        }

                    }

                }

            }

        }

    }

}

以上で終わります、最後まで読んでいただきありがとうございます。