🕌

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

2025/01/26に公開

はじめに 🚀

業務や個人のプロジェクトで、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: 公式サイト からインストーラをダウンロード
  • Mac: 公式サイト からダウンロード、または Homebrew で brew install python
  • Linux: ディストリビューションのパッケージマネージャで python3 をインストール

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

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

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

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

pip3 list

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


Pythonコード 📝

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

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

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

import os
import pandas as pd
import argparse

def excel_to_markdown(folder_path, output_file):
    """
    この関数は指定されたフォルダ内のExcelファイル(.xlsx, .xls)を検索し、
    各シートをMarkdownのテーブル形式に変換して一つのMarkdownファイルにまとめます。

    出力されるMarkdownファイルでは、各Excelファイルの名前が # 見出しとして表示され、
    その下にあるシートが ## 見出しとして表示されます。
    また、冒頭に各Excelファイルのシート一覧も追記されます。
    """

    # ▼▼▼ 出力ファイルの初期化 & 冒頭の説明文を書き込む ▼▼▼
    with open(output_file, 'w', encoding='utf-8') as f_out:
        # 冒頭の説明
        f_out.write("# Excel to Markdown Conversion\n\n")
        f_out.write("このファイルは、指定されたフォルダ内のExcelファイルを一括でMarkdownに変換した結果です。\n")
        f_out.write("ファイル名が `#` 見出し、シート名が `##` 見出しとして整理されています。\n")
        f_out.write("また、以下に各Excelファイルとそのシート名の一覧を示します。\n\n")

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

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

    # ▼▼▼ 各ファイルのシート一覧を冒頭に記載 ▼▼▼
    sheet_summary = []
    with open(output_file, 'a', encoding='utf-8') as f_out:
        f_out.write("## File and Sheet Summary\n\n")  # 見出し
        for file in files:
            file_path = os.path.join(folder_path, file)
            try:
                # Excelファイルを開いて、シート名一覧を取得
                excel_data = pd.ExcelFile(file_path)
                sheet_names = excel_data.sheet_names

                # ファイル名とそのシート名をリストに追加
                sheet_summary.append((file, sheet_names))
                f_out.write(f"- **{file}**\n")
                for sheet in sheet_names:
                    f_out.write(f"  - {sheet}\n")
                f_out.write("\n")

            except Exception as e:
                print(f"{file} のシート一覧取得中にエラーが発生しました: {e}")
                f_out.write(f"- **{file}** (シート一覧取得エラー)\n\n")

    # ▼▼▼ 各ExcelファイルのシートをMarkdownに変換 ▼▼▼
    with open(output_file, 'a', encoding='utf-8') as f_out:
        for file, sheet_names in sheet_summary:
            file_path = os.path.join(folder_path, file)
            try:
                # ファイル名を "# 見出し" として書き込む
                f_out.write(f"# {file}\n\n")

                # シートごとにループしてMarkdownへ追記
                for sheet_name in sheet_names:
                    # シートをDataFrameとして読み込む
                    df = pd.read_excel(file_path, sheet_name=sheet_name)
                    
                    # DataFrameをMarkdown形式に変換
                    markdown_data = df.to_markdown(index=False)

                    # シート名を "## 見出し" として書き込んでテーブルを追加
                    f_out.write(f"## {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 = "./"  # 想定フォルダパス
    default_output = "./output.md"  # 想定出力ファイル

    parser = argparse.ArgumentParser(
        description="指定したフォルダ内のExcelファイルを一括でMarkdown形式に変換します。"
    )
    parser.add_argument(
        "folder_path",
        nargs="?",
        type=str,
        default=default_folder,
        help="Excelファイルが格納されたフォルダのパス (デフォルト: ./)"
    )
    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. ターミナルやコマンドプロンプトから以下のコマンドを実行してください。
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やプラグインなどを活用して段階的な解析や検索を行う仕組みが重要になります。

Discussion