.NETプログラムでWordをMarkdownに変換する方法

Word文書をMarkdown形式に変換することで、コンテンツのポータビリティが向上し、さまざまなプラットフォームで編集や公開がしやすくなります。特に、コンテンツ管理、ブログ公開、技術執筆などのシーンでは、Word文書をMarkdown形式に変換することが大きな利便性をもたらします。本記事では、.NETフレームワークを使用して、既存のツールと技術を活用し、**Word文書からMarkdown形式への変換**を実現する方法を、手順の説明とコード例とともに解説します。

- **[C#でWord文書を直接Markdownファイルに変換する](#c#でword文書を直接markdownファイルに変換する)**
- **[Word文書から画像を削除し、Markdown形式に変換する](#word文書から画像を削除しmarkdown形式に変換する)**

ここで紹介する方法では、[Spire.Doc for .NET](https://jp.e-iceblue.com/introduce/spire-doc-for-net.html)を使用します。NuGet：`PM> Install-Package Spire.Doc`

[無料ライセンス申請](https://www.e-iceblue.com/TemLicense.html)

## C#でWord文書を直接Markdownファイルに変換する方法
文書を`Document.LoadFromFile()`メソッドで読み込み、その後`Document.SaveToFile(filename: String, FileFormat.Markdown)`メソッドを使ってMarkdownファイルに変換できます。以下の手順で操作を行います：
1. 必要なモジュールをインポートする。
2. Documentクラスのインスタンスを作成する。
3. `Document.LoadFromFile()`メソッドでWord文書を読み込む。
4. `Document.SaveToFile(filename: String, FileFormat.Markdown)`メソッドでMarkdownファイルに変換する。
5. リソースを解放する。

**コード例**
```csharp
using Spire.Doc;

namespace WordToMarkdown
{
    class Program
    {
        static void Main(string[] args)
        {
            // Documentクラスのインスタンスを作成
            Document doc = new Document();

            // Wordドキュメントを読み込む
            doc.LoadFromFile("サンプル.docx");

            // ドキュメントをMarkdownファイルに変換
            doc.SaveToFile("output/WordToMarkdown.md", FileFormat.Markdown);
            doc.Dispose();
        }
    }
}
```

出力例
![C#でWord文書を直接Markdownファイルに変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/aa8a1ac6-0cf4-2684-1502-0ad7633703ad.png)

## Word文書から画像を削除し、Markdown形式に変換する方法
上記の方法でWord文書をMarkdownに変換すると、画像はデフォルトでBase64エンコードされてMarkdownファイルに含まれるため、ファイルサイズが大きくなり、互換性に影響を与える可能性があります。この問題を回避するために、変換時に画像を削除し、編集後にリンクとして画像を追加することができます。以下の手順で操作を行います：
1. 必要なモジュールをインポートする。
2. `Document`クラスのインスタンスを作成する。
3. `Document.LoadFromFile()`メソッドでWord文書を読み込む。
4. 文書内の各セクションをループ処理し、段落をさらにループする。
5. 各段落内のドキュメントオブジェクトをループ処理する：
    - `Paragraph.ChildObjects[]`プロパティを使用してドキュメントオブジェクトを取得する。
    - DocPictureクラスのインスタンスかどうかを確認し、該当する場合は`Paragraph.ChildObjects.Remove(DocumentObject)`メソッドで段落から削除する。
6. `Document.SaveToFile(filename: String, FileFormat.Markdown)`メソッドでMarkdownファイルに変換する。
7. リソースを解放する。

**コード例**
```csharp
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

namespace WordToMarkdownNoImage
{
    class Program
    {
        static void Main(string[] args)
        {
            // Documentクラスのインスタンスを作成
            Document doc = new Document();

            // Wordドキュメントを読み込む
            doc.LoadFromFile("サンプル.docx");

            // ドキュメント内の各セクションを反復処理
            foreach (Section section in doc.Sections)
            {
                // セクション内の各段落を反復処理
                foreach (Paragraph paragraph in section.Paragraphs)
                {
                    // 段落内の各ドキュメントオブジェクトを反復処理
                    for (int i = 0; i < paragraph.ChildObjects.Count; i++)
                    {
                        // ドキュメントオブジェクトを取得
                        DocumentObject docObj = paragraph.ChildObjects[i];
                        // それがDocPictureクラスのインスタンスかどうかを確認
                        if (docObj is DocPicture)
                        {
                            // DocPictureインスタンスを削除
                            paragraph.ChildObjects.Remove(docObj);
                        }
                    }
                }
            }

            // ドキュメントをMarkdownファイルに変換
            doc.SaveToFile("output/WordToMarkdownNoImage.md", FileFormat.Markdown);
            doc.Dispose();
        }
    }
}
```

出力例
![Word文書から画像を削除しMarkdown形式に変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/09c34430-3b52-ed52-226e-9839aa540218.png)

本記事では、C#コードを使用して.NETプログラム内でWord文書をMarkdown形式に変換する方法を紹介しました。