【2026年最新】Excel文書を生成AIで扱う3つの方法|openpyxl・PDF変換・LibreOfficeと設計OSへの組み込み

【2026年最新】Excel文書を生成AIで扱う3つの方法|openpyxl・PDF変換・LibreOfficeと設計OSへの組み込み
banner_01

「Excel文書を生成AIに読ませても、肝心の表や枠線、オブジェクト内のテキストが拾えず回答精度が落ちる」——本記事はこの製造業の頻出課題に対し、openpyxlでのパース/PDF変換ベースの視覚解析/LibreOfficeを使ったページ区切り制御の3アプローチを、2026年版の選定基準と業務OS(設計OS/品質OS)への組み込み方まで含めて整理します。

製造業の見積書・仕様書・工程管理書はExcelで作られることが多く、RAG(検索拡張生成)の入力品質を決める最大の関門になります。コードレベルでの抽出方法を押さえつつ、「単発のパース処理ではなく業務基盤として運用する」視点で、ChatGPT・ClaudeなどLLM活用の精度を底上げするための実装ガイドです。

LLMを悩ませる”Excel文書”とは——3カテゴリの構造

ここで言うExcel文書とは、純粋な表データ(CSV相当)ではなく、セルに文章を書く・図形オブジェクトでフローチャートを描く・画像やグラフを混在させるといった「人が見るためのレイアウト」を持ったExcelファイルを指します。製造業の見積書、仕様書、工程管理書、検査記録、是正処置報告書(8D/FMEA)などの大半はこのカテゴリに入ります。

Excel文書がコンピュータにとって扱いづらい理由は、セル単位の値だけでなく、枠線・オブジェクト・画像・ページ区切りなどの「視覚情報」に意味が埋め込まれているためです。openpyxlやpandasで素直に読むと、枠線で構造化された表が単なる文字列の羅列になり、フローチャートのつながりが失われ、テキストボックスの内容がそもそも拾えません。

Excel文書の3カテゴリと生成AI解析難易度マップ枠線で構造化されたExcel・セルでフローチャートを描いたExcel・オブジェクト/画像/グラフ混在Excelの3カテゴリと、それぞれの生成AI解析難易度を示すマップExcel文書の3カテゴリと生成AI解析難易度マップ(2026年版)解析しやすい解析が難しい①枠線で構造化工程管理書/検査記録票/見積書テンプレート難易度:中枠線をテーブル境界として検出する処理が必要推奨アプローチPDF変換+視覚解析②セルでフローチャート業務フロー図/工程図/品質改善PDCA図難易度:高オブジェクト形状と矢印の論理関係を抽出する必要推奨アプローチ画像化+VLM+mermaid化③オブジェクト混在テキストボックス/画像/グラフ/自由配置難易度:最高openpyxl単体では空に見えxml直読+画像化が必須推奨アプローチPDF変換+ページ区切り制御アプローチ選定の原則単一手法ではなく、Excel文書のカテゴリに応じて使い分ける/業務OSの中で前処理パイプラインとして組み込む出典:本記事の検証結果(製造業向け生成AI開発現場のExcel処理サンプル分析)
図1:Excel文書を3カテゴリに分けた解析難易度マップ。枠線・フローチャート・オブジェクト混在の順で難易度が上がり、それぞれに適した処理パイプラインが異なる。

下記では、製造業向けの生成AI(SPESILLなど)の開発現場で実際にトライしてきた中から、3つのアプローチを選んで解説します。サンプルExcel文書は説明用に作成したものです。

解析が難しいExcel文書の典型例(3パターン)

①枠線で構造化

枠線を使って文書の構造化を行っているExcel文書の事例で、工程管理書など製造業でよく利用されている代表例です。生成AIやLLMに読み取らせる際に難しいのは、個々のセルではなく枠線をテーブル境界として認識する必要がある点です。サンプルにあるように画像が挿入されている場合は、画像も含めて認識させる処理が必要になります。

②セルでフローチャート

オブジェクトやセルを駆使してフローチャートを作成している例です。セルの枠線・スタイル・配置に意味があるため、それらの幾何関係を生成AIやLLMに認識させる必要があります。

③オブジェクトや画像、グラフの混在

LLMにとって最も扱いづらいのが、オブジェクト・画像・グラフが混在しているExcel文書です。セルを直接読むのではなく、Excelそのものを画像として扱いLLMの画像入力で処理する方法が現実的です。フローチャート部分については、mermaid形式のテキストに変換することで構造化情報として保持できます。

ERPは「お金とモノの記録台帳」、PLMは「図面とBOMの保管庫」であり、いずれも「業務そのもの」を実行する仕組みではない。

業務OSとは何か——製造業ERPでもPLMでもない、第3の業務基盤の正体(roboin-fa.com)

Excel文書も同じです。Excel自体は「データを書く道具」であって、見積もり・FMEA・是正処置といった業務そのものを動かす仕組みではありません。だからこそ、生成AIで読みやすくする前処理は「個別のスクリプト」ではなく「業務基盤の前処理パイプライン」として設計する必要があります。後半でこの観点に戻ります。

アプローチ1:openpyxlなどを使ってExcelをそのままパースする

ステップ1:テキスト情報の抽出

from openpyxl import load_workbook

workbook = load_workbook("<Excelファイルのパス>", data_only=True)
extracted_data = {}
for sheet_name in workbook.sheetnames:
    sheet = workbook[sheet_name]
    sheet_text = []
    for row in sheet.iter_rows(values_only=True):
        for cell in row:
            if cell is not None:
                sheet_text.append(str(cell))
    extracted_data[sheet_name] = "\n".join(sheet_text)
print(extracted_data)

ステップ2:表として読み込む

上の方法ではすべてのセルをテキストとして結合しているだけのため、表としての情報が失われます。pandasを使うとExcelを表として読み込み、Markdownに変換できます。ただしセル単位で要素が格納されている前提のため、実例①で示したような手動で書かれた枠線に沿った表は意図通りには再構成されません。構造化されたテーブルデータならこの方法で十分です。

import pandas as pd

excel_data = pd.read_excel("<Excelファイルのパス>", sheet_name=None)
markdown_data = {}
for sheet_name, df in excel_data.items():
    markdown_content = df.to_markdown(index=False, tablefmt="pipe")
    markdown_data[sheet_name] = markdown_content
print(markdown_data)

ステップ3:オブジェクト内のテキストの抽出

下のようなExcelファイルをChatGPTに与えて質問すると「ファイルが空である」という回答が返ってきます。何が起きているのでしょうか。

このExcelファイルは、セルに文字が書かれているのではなく、矩形オブジェクトの中にテキストが埋め込まれている形式になっています。そのため、セルのパースだけではなく、オブジェクト内テキストのパースも必要です。

Excelのオブジェクトはopenpyxlやpandasでは取得できないため、Excelファイル内部(xlsxはzip形式)に直接アクセスし、特定のXMLファイルをパースして取得する必要があります。


import zipfile
from xml.etree import ElementTree as ET

textbox_contents: list[str] = []
with zipfile.ZipFile("<Excelファイルのパス>", "r") as z:
    for file_name in z.namelist():
        if "drawings" not in file_name:
            continue
        ns_xdr = "{http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing}"
        ns_a = "{http://schemas.openxmlformats.org/drawingml/2006/main}"
        with z.open(file_name) as f:
            try:
                tree = ET.parse(f)
                root = tree.getroot()
            except ET.ParseError as e:
                print(f"Error parsing XML from file {file_name}: {e}")
                continue
            for two_cell_anchor in root.iter(f"{ns_xdr}twoCellAnchor"):
                for textbox in two_cell_anchor.iter(f"{ns_xdr}txBody"):
                    text_content = ""
                    for paragraph in textbox.iter(f"{ns_a}p"):
                        paragraph_content = ""
                        for text in paragraph.iter(f"{ns_a}t"):
                            if text.text:
                                paragraph_content += text.text
                        text_content += "\n" + paragraph_content
                    textbox_contents.append(text_content)
print(textbox_contents)

ステップ4:グラフ情報の抽出

次はExcel内のグラフ情報の抽出です。

グラフは画像として抽出してもよいのですが、どのデータを参照しているかが分かるため、生成AIやLLMに与える上ではデータを抽出して与える方法が有効です。以下では同様にExcel内のzip構造から、チャート情報のXMLファイルを読み込み、pandasのデータフレームに変換しています。

import zipfile
import pandas as pd
from xml.etree import ElementTree as ET

def parse_xml_for_chart(xml_data):
    try:
        root = ET.fromstring(xml_data)
    except ET.ParseError as e:
        print(f"Error parsing XML: {e}")
        return {}
    ns = {"c": "http://schemas.openxmlformats.org/drawingml/2006/chart"}
    data = {}

    for series in root.findall(".//c:ser", namespaces=ns):
        cv_elem = series.find("./c:tx/c:strRef/c:strCache/c:pt/c:v", namespaces=ns)
        if cv_elem is None:
            series_name = ""
        else:
            series_name = cv_elem.text
        categories = [
            pt.find("./c:v", namespaces=ns).text
            for pt in series.findall("./c:cat/c:strRef/c:strCache/c:pt", namespaces=ns)
        ]
        series_values = [
            pt.find("./c:v", namespaces=ns).text
            for pt in series.findall("./c:val/c:numRef/c:numCache/c:pt", namespaces=ns)
        ]
        data[series_name] = dict(zip(categories, series_values))
    return data

doc_zip = zipfile.ZipFile("<Excelファイルのパス>")
zipped_files = doc_zip.namelist()
chart_tables: list[pd.DataFrame] = []
for file in zipped_files:
    if file.startswith(f"{file_type}/charts/chart") and file.endswith(".xml"):
        xml_data = doc_zip.read(file)
        data = parse_xml_for_chart(xml_data)
        df = pd.DataFrame(data)
        chart_tables.append(df)
print(chart_tables)

アプローチ2:PDFに変換してPDFや画像として扱う

近年、画像や表を含んだPDFを視覚情報に基づいて高精度に解析できるツールが急増しました。そこで、ExcelをPDFに変換し、視覚解析対応のパーサに通すことで、枠線で構造化された表やフローチャートも構造化情報として抽出できます。

視覚情報を考慮したPDFパーサ・AIツールには以下のようなものがあります。商用利用時は必ず各ライセンスを確認してください。

  1. opendatalab / MinerU:https://github.com/opendatalab/MinerU
  2. DS4SD / docling:https://github.com/DS4SD/docling
  3. getomni-ai / zerox:https://github.com/getomni-ai/zerox
  4. run-llama / llama_parse:https://github.com/run-llama/llama_parse
  5. pymupdf / RAG:https://github.com/pymupdf/RAG
  6. kotaro-kinoshita / yomitoku:https://github.com/kotaro-kinoshita/yomitoku
  7. QwenLM / Qwen2-VL:https://github.com/QwenLM/Qwen2-VL
  8. ChatGPT-4o:https://openai.com/index/hello-gpt-4o/
  9. Anthropic PDF support:https://docs.anthropic.com/en/docs/build-with-claude/pdf-support

①MinerU、②docling、⑥yomitokuは、表や画像を検出する検出器とOCRを使ってパースします。yomitokuは日本語に特化した機械学習モデルが特徴です。③zerox・④llama_parseはChatGPTなどのLLMを内部で使ってパースし、⑦Qwen2-VLや⑧GPT-4oはPDFを画像化してOCR性能の高いVLMで読み取ります。Excel→PDFのプログラム変換にはunoconvgotenbergなどが使えます。

これらの方法を組み合わせることで、実例①の枠線で構造化されたデータやフローチャートも構造化情報として抽出できます。LLMを用いたPDF→Markdown変換を行うと、Excelの表は以下のようにMarkdown表として出力できます。

同様にフローチャート(実例②)はmermaid形式に変換できます。

Excelフローチャートのmermaid形式変換結果

アプローチ3:PDF変換時にページ区切りを明確に設定する

アプローチ2でExcelをPDFに変換する際、Excel側でページ設定がされていないと、変なところでページが切れる問題が発生します。たとえば防衛省が公開しているシステム経費の実績資料をそのままPDFに変換すると、下の図のように表が途中で切れたPDFになります。これは作成者がページ区切りを設定しておらず、Office側が自動で適当な位置で切ってしまうために起きる現象です。

unoconvやgotenbergはページ区切りまでは調整できないため、ページ設定を自動で整えてPDF変換するツールが必要です。APIが提供されているWebサービスとしては以下があります。

これらのツールは無料枠もありますが、プロダクト本番運用では有料課金が発生します。「Excel→PDF変換だけで課金したくない」「自社で挙動を調整できるようにしたい」という要件で、自前で実装するアプローチも実用的です。office-to-pdf-serveとしてGitHub上で公開しており、Dockerで動くExcel→PDF変換APIサーバとして利用できます。

この方法を使うと、先ほどの防衛省資料も下の図のように1枚に収まる形でPDFに変換できます。

仕組みとしては、LibreOffice(Linuxで動くフリーのOfficeライクなツール)を内部でサーバとして起動しておき、APIでセル情報・ページ情報にアクセス・編集して、最終的にPDFに変換するという流れです。LibreOfficeをサーバとして立ち上げるコマンドは以下です。

soffice --accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager --headless

立ち上げた状態で、unoというpythonパッケージを使うことで、セルやページ情報にアクセスできます。

import sys
sys.path.append("/usr/lib/python3/dist-packages/")  # unoはLibreOfficeと一緒にシステムのPythonパッケージとしてインストールされるのでパスを登録しておく
import uno

local_context = uno.getComponentContext()
resolver = local_context.ServiceManager.createInstanceWithContext(
    "com.sun.star.bridge.UnoUrlResolver", local_context
)
context = resolver.resolve(
    f"uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext"
)
desktop = context.ServiceManager.createInstanceWithContext(
    "com.sun.star.frame.Desktop", context
)
input_url = "file:///<Excelファイルのパス>"
document = desktop.loadComponentFromURL(input_url, "_blank", 0, ())
for sheet in self.document.Sheets:
    cell = sheet.getCellByPosition(0, 0)
    print(cell)

ここまでの対策によって、複雑なExcel文書から精度高く情報抽出ができるようになります。

3アプローチの選定基準(2026年版)

3アプローチを実務で選定する際の評価軸を整理しました。単一アプローチではなく、Excel文書のカテゴリに応じて使い分けるのが基本になります。

評価軸①openpyxlパース②PDF変換+視覚解析③ページ区切り制御PDF
実装難易度低(標準ライブラリ)中(OSS組合せ)高(LibreOffice等の運用)
枠線で構造化された表の解析△(テキスト列挙のみ)○(境界を視覚検出)◎(ページ完結で精度向上)
フローチャート(オブジェクト)×(drawings.xml直読が必要)◎(mermaid化可)
グラフ・画像混在△(zip経由でデータ抽出可)◎(VLMで画像認識)
運用コスト低(Python単体)中(GPU推奨/API課金)中(コンテナ運用)
RAG構築での総合適性定型表のみのRAG向け大半のExcel文書RAG向け長尺帳票・公的資料RAG向け
業務OS(設計OS/品質OS)親和性△(個別スクリプト止まり)○(前処理パイプラインとして組込み)○(標準化された変換層として組込み)
表1:Excel文書を生成AIで扱う3アプローチの選定基準(2026年版)。枠線が中心ならアプローチ②、長尺・帳票主体ならアプローチ③、定型表のみならアプローチ①が現実的。

表が示すのは、「単一アプローチでExcel文書すべてをカバーしようとすると破綻する」という事実です。実運用では3アプローチを組み合わせ、Excel文書のカテゴリ判別→適切なパイプラインへの振り分け、という処理ルーティングを前処理層で実装することになります。

【2026年最新】Excel文書解析は「単発スクリプト」ではなく「業務OSの前処理層」として設計する

ここまで読むと、Excel文書を生成AIで扱う技術ピースは2026年時点で揃っていることが分かります。しかし、装置メーカー・設計部門・品質部門が直面する本質的な課題は、「Excelをパースできるか」ではありません。

設計者の業務時間の約4割は「情報の探索+メンテナンス+連絡」で溶ける——図面そのものを描く時間ではない。

設計部長が知らないと損する、図面検索の本当のコスト(roboin-fa.com)

Excel文書まわりでも同じ構造があります。見積書を作る、FMEAを書く、是正処置を記録する——これらの業務時間の多くは「中身を書く時間」ではなく「過去案件の類似Excelを探す/前任者に体裁を確認する/Excelの体裁を直す」に消えています。Excel解析を生成AIで高速化しても、業務フローが個別属人運用のままでは現場の業務時間は思ったほど減りません。

業務OSの3層構造とExcel文書解析パイプラインの位置づけ業務層(設計OS/品質OS)・記録層(PLM・ERP・社内ファイルサーバ)・道具層(openpyxl/PDFパーサ/LibreOffice)の3層で構成される業務基盤図。Excel解析は道具層に位置し、業務層から呼び出される前処理パイプラインとして組み込まれる業務OSの3層構造とExcel文書解析パイプラインの位置づけ業務層:設計OS/品質OS/調達OS見積依頼の構造化 / FMEAの起票・レビュー / 是正処置の追跡 / 仕様書テンプレート管理「Excelの中身を業務として誰がどう判断するか」を扱う層記録層:PLM/ERP/社内ファイルサーバ既存Excel資産 / 仕様書 / 見積書 / 検査記録 / 過去案件アーカイブ「過去の記録を保管する層」openpyxlパースセル値・XML直読定型表向けPDF変換+VLMMinerU / docling / GPT-4o枠線・フローチャート向けLibreOffice/unoページ区切り自動化長尺帳票向け道具層:Excel解析パイプライン「単一機能のツール群(業務層から呼び出される前処理)」道具層のExcel解析が高速化しても、業務層の設計OS/品質OSと連携してはじめて現場の業務時間が短縮される
図2:業務OSの3層構造とExcel文書解析パイプラインの位置づけ。Excel解析は「道具層」で動き、業務層(設計OS・品質OS)と接続することで「Excelを書く業務」自体が高速化する。

SPESILLのような製造業向け生成AIは、まさにこの「業務層から呼び出されるExcel前処理パイプライン」を持つことで、仕様書・FMEA・是正処置・見積書・各種ログといったExcel帳票全般を構造化+AI活用可能にする基盤として機能します。

設計OSは図面・部品表・設計変更を一気通貫で扱う業務エージェント基盤であり、PLM/CADのデータ層に対する「業務層」として位置する。

設計OSとは——図面・部品表・設計変更を一気通貫させる業務エージェント基盤(roboin-fa.com)

Excel文書解析もこれと同じ構造で、単発スクリプトとしてではなく、設計OS/品質OSの前処理層として組み込むことで「Excel資産の業務OS化」が実現します。

FAQ:Excel文書×生成AIの実務疑問

Q1. ChatGPTにExcelをそのまま添付すれば読めるのに、わざわざパース処理が必要ですか?

単発の質問なら直接添付で十分なケースが多いですが、RAG(検索拡張生成)として大量のExcel文書を継続的に扱う場合は前処理が必須です。Excelをアップロードした際の内部解析はLLM側のブラックボックスで、枠線で構造化された表やオブジェクト内テキストが拾えないことがあります。社内RAGや業務OSの中で扱う場合、自前のパイプラインで「どこまで構造化できたか」をログとして残せる構成が安全です。

Q2. openpyxlとpandas、Excel文書の解析にはどちらを使うべきですか?

用途で使い分けます。pandasは「すでに構造化されたテーブル」(CSV相当のシート)の処理に最適で、Markdown変換まで一発で書けます。openpyxlは「テーブル+オブジェクト+画像が混在するExcel文書」に対して、低レベルで細かい制御が必要な場合に向きます。実運用では「pandasで一次パース→失敗したらopenpyxlでZIP直読」のフォールバック構造が現実的です。

Q3. PDF変換せずに、Excelを直接GPT-4o/Claude 3に画像入力する方法はどうですか?

枠線・フローチャート・グラフ混在の解析精度は高くなりますが、「ページ区切りなしの大判Excelをそのまま画像化すると、画像の解像度がVLMの入力制約を超えて精度が落ちる」問題があります。アプローチ③(ページ区切り制御PDF)を経由してから画像化することで、各ページに最適化された解像度でVLMに渡せます。実用ではPDF経由が安全です。

Q4. 機密性の高いExcel文書をクラウドAIに渡すのが難しい場合の選択肢は?

オンプレ運用可能なOSSパイプラインで完結させます。openpyxl+yomitoku(日本語特化OCR)+LibreOffice+ローカルLLM(Qwen2-VL/Llama 3.2 Visionなど)を組み合わせれば、データを外部に出さずにExcel文書解析と要約・抽出までできます。社内GPUを共有する形が現実的で、業務OS側にはAPI経由でつなぐ構成にします。

Q5. 過去のExcel資産が数万件あります。どこから手を付ければいいですか?

全件を一度に処理しようとせず、業務頻度が高い帳票テンプレートから優先順位を付けるのが鉄則です。例えば見積書テンプレートが20種類あれば、案件件数の多い上位5種類だけRAG化するだけで業務時間短縮の8割を取れます。テンプレートごとに「アプローチ①でいけるか/②が必要か/③まで必要か」をマップ化し、対象テンプレート→アプローチ→検証の順で進めます。これは設計OS/品質OSの導入プロジェクトの典型的な進め方です。

関連記事:業務OSの最前線

次のアクション

Excel文書を生成AIで扱う技術は2026年時点で実用域に入っています。一方、本記事の3アプローチをそのまま単発スクリプトとして使うだけでは、現場の業務時間短縮効果は限定的です。業務OS(設計OS/品質OS)の前処理パイプラインとして組み込み、業務テンプレートと連動させることで、初めてExcel資産が「資産」になります。

SPESILLや設計OS/品質OSと自社のExcel帳票を組み合わせた構成検討にご関心があれば、業務診断(30分・無料)または設計OSページからご相談ください。

banner_01
記事一覧
広告 広告

関連記事

の最新情報をお届け

厳選した記事を定期配信
キャンペーン情報などをいち早く確認