Excelファイルをまとめて一つのMarkdownに出力してAI解析につなげる 📊🔍

## はじめに 🚀

業務や個人のプロジェクトで、Excelファイル（.xlsx や .xls 形式）が大量にあるケースがあります。これらをまとめて1つのテキストファイルにまとめておくと、あとで検索や解析がしやすくなります。さらに近年では生成AIを活用したり、クラウド上の大規模言語モデル（LLM）に読ませるケースも出てきています。

ここでは Python のスクリプトを使って、以下を実現する手順を解説します。

1. フォルダ内の複数の Excel ファイルをすべて読み込む
2. 各ファイルのシートごとにテーブル情報を Markdown 形式に変換する
3. 変換結果を1つの Markdown ファイルにまとめる
4. 生成AIで解析できるようにする

---

## 想定ケース ✅

- Windows / Mac / Linux いずれでも実行可能。
- Python 3.x がインストール済み。
- フォルダに `.xlsx` や `.xls` が複数存在。
- まとめ先の Markdown ファイルを生成したい。
- そのMarkdownファイルを ChatGPT などに貼りつける、もしくはアップロードして解析したい。

---

## 事前準備 🛠

### Python のインストール 🐍

Python 3.x がインストールされていない場合はインストールしてください。

- Windows: [公式サイト](https://www.python.org/downloads/windows/) からインストーラをダウンロード
- Mac: [公式サイト](https://www.python.org/downloads/macos/) からダウンロード、または Homebrew で `brew install python`
- Linux: ディストリビューションのパッケージマネージャで `python3` をインストール

### 必要なライブラリのインストール 📦

本スクリプトでは以下のライブラリを使用します。すべて、ターミナル(またはコマンドプロンプト)上で次のコマンドを実行してインストールできます。

```bash
pip3 install --upgrade pandas openpyxl xlrd>=2.0.1 tabulate
```

- **pandas**: ExcelファイルやCSVなどのデータをDataFrameで扱えるようにするライブラリ
- **openpyxl**: `.xlsx`形式のファイルを読み込むために必要
- **xlrd**: `.xls`形式のファイルを読み込むために必要
- **tabulate**: DataFrameをMarkdown形式に変換するために必要

インストール済みかどうか確認するには、以下のコマンドでライブラリ一覧を表示して確認します。

```bash
pip3 list
```

> **補足**: `pip3 install --upgrade` オプションを付けると既存ライブラリも更新されます。また、`pip3 install --upgrade pip` とすることでpip自体を最新バージョンに更新できます。

---

## Pythonコード 📝

以下のスクリプト例では、

- **フォルダ内のすべての ********`xlsx`******** / ********`xls`******** ファイルを探す**
- **シートごとに読み取って DataFrame 化**
- **Markdown 形式 (********`df.to_markdown()`********) に変換**
- **1つのファイルに順番に追記する**

という流れで実装しています。

```python
import os
import pandas as pd
import argparse

def excel_to_markdown(folder_path, output_file):
    """
    指定したフォルダ内のExcelファイル(.xlsx, .xls)をMarkdown形式に変換し、
    1つのファイルに出力する関数。

    Parameters:
        folder_path (str): Excelファイルが格納されたフォルダのパス。
        output_file (str): まとめて出力するMarkdownファイルのパス。
    """
    # 出力ファイルを初期化
    with open(output_file, 'w', encoding='utf-8') as f:
        f.write("")

    # フォルダ内のファイルを取得
    files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]

    if not files:
        print("Excelファイルが見つかりませんでした。")
        return

    with open(output_file, 'a', encoding='utf-8') as f_out:
        for file in files:
            file_path = os.path.join(folder_path, file)
            # Excelファイルを読み取る
            try:
                excel_data = pd.ExcelFile(file_path)
                for sheet_name in excel_data.sheet_names:
                    df = excel_data.parse(sheet_name)
                    # Markdown形式に変換
                    markdown_data = df.to_markdown(index=False)

                    # ファイルに追記
                    f_out.write(f"# {file} - {sheet_name}\n\n")
                    f_out.write(markdown_data)
                    f_out.write("\n\n")

                print(f"{file} のデータをMarkdownに追加しました。")
            except Exception as e:
                print(f"{file} の処理中にエラーが発生しました: {e}")

if __name__ == "__main__":
    # 想定のデフォルト値 (必要なら自由に変更)
    default_folder = "./excel_files"  # Excelファイルが格納されているフォルダ
    default_output = "./output.md"     # まとめて出力するMarkdownファイル

    parser = argparse.ArgumentParser(description="フォルダ内のExcelファイルをMarkdown形式に変換")
    parser.add_argument("folder_path", nargs="?", type=str, default=default_folder,
                        help="Excelファイルが格納されたフォルダのパス (デフォルト: ./excel_files)")
    parser.add_argument("output_file", nargs="?", type=str, default=default_output,
                        help="出力するMarkdownファイルのパス (デフォルト: ./output.md)")

    args = parser.parse_args()

    excel_to_markdown(args.folder_path, args.output_file)
```

### 使い方 💡

1. スクリプトファイル (例: `excel_to_md.py`) を保存します。
2. ターミナルやコマンドプロンプトから以下のコマンドを実行してください。

```bash
python3 excel_to_md.py [フォルダのパス] [出力Markdownファイルのパス]
```

- フォルダのパスを指定しなかった場合、デフォルトで `./excel_files` を参照します。
- 出力Markdownファイルのパスを指定しなかった場合、デフォルトで `./output.md` に書き出されます。

---

## 生成AIで活用する 🤖💡

1つのMarkdownファイルにまとめたら、以下のような方法でAI活用ができます。

1. **埋め込みなどの検索エンジンの材料にする**
   - ファイル内のテキストをベクトル化して、文章検索やQAシステムに活用できます。
2. **クラウドでアップロード・解析**
   - 一般的なアプリケーション（Notion、Google Drive、GitHubなど）にアップロードし、そこからAPI等を利用してAIで解析させる仕組みを作ることも可能です。

> **大規模データへの対応**: 大量のシートや膨大な行数を含む場合、すべてを一度にコピー＆ペーストしてチャットに入力するのは現実的ではありません。OpenAI API や ChatGPTアプリの連携機能を使ってファイルを一括読み込みし、段階的にテキストを処理する方法もあります。ドキュメント検索用のプラグインや、独自の検索サーバをセットアップしてデータを保持し、必要に応じて問い合わせる仕組みを整えると便利です。

---

## ユースケース例 ✨

Excelファイルの内容をMarkdown化することで、実際にどんな目的を実現できるのか、いくつか具体例を挙げます。

1. **大量のシートを一括翻訳 🌐**

   - Excelファイル内の文章が日本語以外の言語で書かれている場合、Markdownのテキストを翻訳ツールやChatGPTに投入して一気に翻訳が可能です。
   - 逆に、日本語の文書を海外向けに共有するため、英語などに翻訳したい場合にも役立ちます。

2. **要約や洞察を得る 🔎**

   - BIツールを使わずとも、生成AIにMarkdown形式の表データを与えることで、データの要約やトレンドの読み取り、意味づけをした解説が簡単に得られます。

3. **複数のファイルを突合・比較する 📝**

   - 複数のExcelファイルに類似したデータが入っているときに、それらをまとめたMarkdownをAIに読ませると、相違点の列挙や共通事項の抽出を自動で行ってくれます。

4. **ナレッジデータベース化 💾**

   - 過去のExcelファイルをまとめてMarkdown化して、GitHubや社内Wikiなどで履歴を管理できます。あとから全文検索しやすいのも利点です。

5. **プログラムや作業手順書の生成 💻**

   - Excelのデータ構造や仕様書などをMarkdownに落とし込み、生成AIからテキストベースのテンプレートや手順書を生成してもらうことが可能です。

---

## まとめ ✅

- 複数のExcelファイルをまとめて1つのテキストとして扱うことで、検索性やAI解析の効率が大幅に向上します。
- Pythonの `pandas`, `openpyxl`, `xlrd`, `tabulate` を利用すれば簡単にMarkdownに変換できます。
- 生成AIを活用する際は、あらかじめテキストの形式にしておくとAIの性能を発揮しやすいです。
- ユースケースとしては翻訳、要約、比較など様々なシーンで活躍します。
- 大規模データを扱う場合は、APIやプラグインなどを活用して段階的な解析や検索を行う仕組みが重要になります。