コンテンツにスキップ

Excel・Word・PDF を AI に読ませる

実務で扱うファイルを CLI の AI に渡す。読めない形式を見分け、読めたつもりの取りこぼしを防ぐ

対象 Claude Code / Gemini CLI確認 1 か月前(2026年8月16日)

やりたいこと

手元にある実務ファイル——見積書の Excel、契約書の Word、規程集の PDF——を AI に渡して読ませたい。

素朴にやると穴が空く

「ファイルパスを渡せば読んでくれる」と思って始めると、最初の 10 分で詰まります。

穴1: Excel と Word は読めない

Claude Code の Read ツールが扱えるのは、テキスト・画像・PDF・Jupyter notebook だけです。

形式Claude Code の ReadGemini CLI の read_file
テキスト(.txt .md .csv .json)読める読める
画像(PNG / JPG)読める読める
PDF読める(後述の制限あり)読める
音声記載なし読める
Jupyter(.ipynb)読める(出力込み)記載なし
Excel(.xlsx)記載なし記載なし
Word(.docx)記載なし記載なし
PowerPoint(.pptx)記載なし記載なし

実務でいちばん使うファイルが 3 つとも入っていません。 .xlsx は中身が ZIP で固められた XML なので、テキストとして開いても読めるものは出てきません。

議事録の音声を扱うなら Gemini CLI です。read_file が音声に対応しているのはこちらだけです。

穴2: CSV にすれば読めるが、大きいと黙って一部しか見ない

Excel を CSV に変換すればテキストなので読めます。ただし大きい表は最後まで読まれません。

Read ツールは、全体がトークン上限を超えると先頭のぶんだけ返し、PARTIAL view という注記を付けます。続きの読み方(offset と limit)も一緒に返りますが、AI がその続きを読むとは限りません。

これが実務で怖いのは、途中まで読んで集計してしまうからです。「合計を出して」と頼んで返ってきた数字が、実は先頭 300 行だけの合計だった、という壊れ方をします。エラーは出ません。

なお offset と limit を明示してもなお上限を超える場合はエラーになります。1 行が巨大な場合は、読むのではなく検索(Grep)を使うよう案内されます。

穴3: PDF は 10 ページを超えると範囲指定が要る

  • 短い PDF は全体を読む
  • 10 ページを超える PDF は pages パラメータで範囲を指定する("1-5" のような形式)
  • 一度に最大 20 ページ

つまり 100 ページの社内規程集は、最低 5 回に分けて読むことになります。「規程集を読んで答えて」と一言頼んだだけでは、全体を見ていない可能性があります。

穴4: 画像は勝手に劣化する

大きな画像はモデルの上限に合わせてリサイズ・再圧縮されます。さらにリサイズ後も 500KB を超える画像は、ピクセル寸法を保ったまま低品質の JPEG に再エンコードされます(v2.1.196 以降)。

スキャンした帳票の細かい数字を読ませる用途では、元画像では読めた文字が読めなくなりうるということです。

穴5: 変換コマンドの出力も上限に当たる

「じゃあシェルで変換すればいい」も、そのままでは詰まります。Bash の実行結果が Claude に渡る量には上限があります。

結果渡るもの
成功約 30,000 文字までそのまま。超えるとファイルに保存され、パスと短いプレビューだけが渡る
失敗約 10,000 文字まで。超えると先頭と末尾の抜粋のみ

変換結果を画面に流すのではなく、ファイルに書いてからパスを渡すのが正しい形です。

手順

1. 読める形式に変換してから渡す

変換そのものは各自の環境の話で、この図書館が出典を持っている範囲ではありません。よく使われるのは次のあたりです。

Terminal window
# Excel → CSV(LibreOffice が入っている場合)
soffice --headless --convert-to csv --outdir ./converted 見積書.xlsx
Terminal window
# Excel → CSV(Python + pandas の場合。シートごとに分ける)
python -c "
import pandas as pd, sys
for name, df in pd.read_excel('見積書.xlsx', sheet_name=None).items():
df.to_csv(f'converted/{name}.csv', index=False)
"

変換したファイルはリポジトリに置かず、作業用ディレクトリに出してください。 実務ファイルには取引先名や個人情報が入っていることが多く、うっかりコミットする事故がここで起きます。

2. 大きい表は「読ませる」のをやめる

行数の多い CSV は、読ませるのではなく集計させます。 AI にファイル全体を読ませる代わりに、集計するコマンドを書かせて実行させる形です。

Terminal window
# まず規模を確かめる。これだけなら出力は数行で済む
wc -l converted/*.csv && head -3 converted/売上.csv

行数を先に見せると、AI が「全部読む」か「スクリプトで集計する」かを判断できます。何行あるか分からないまま読ませるのが、穴2 を踏む典型的な入り方です。

3. PDF はページ範囲を自分で区切る

10 ページを超える PDF は、どこに何が書いてあるかを先に確認してから読ませます。

# 頼み方の例
規程集.pdf の目次(1-3ページ)を読んで、
「時間外労働」について書かれている章が何ページかを教えてください。

そのうえで該当範囲だけを読ませます。全体を通読させると、20 ページずつの読み取りを繰り返してコンテキストを埋め尽くします。

4. 複数ファイルをまとめて渡す(Gemini CLI)

Gemini CLI には複数ファイルを連結して読む read_many_files があり、プロンプト中の @ で起動します。

@./converted/ この四半期の見積書をすべて読んで、金額の合計を出してください

ディレクトリを指定するとサブディレクトリまで辿ります。有効なら .gitignore と .geminiignore を尊重するので、除外設定がそのまま効きます。

対応する画像・PDF・音声・動画は正しくエンコードされてマルチモーダル入力として渡り、それ以外のバイナリは穏当にスキップされます。.xlsx を混ぜても壊れはしませんが、読まれもしません。

確認方法

読めたつもりになっていないかを、その場で確かめます。

# 1. 本当に最後まで読んだか
このファイルの最終行の内容をそのまま引用してください。
# 2. 件数が合っているか
読み取った行数を答えてください。wc -l の結果と一致しますか。
# 3. PDF の場合
何ページ目から何ページ目までを読みましたか。

1 と 2 が食い違うなら穴2 を踏んでいます。 3 で「全体」と答えつつページ数を言えないなら、読んでいないページがあります。

残る限界

  • Excel / Word / PowerPoint を直接読む方法は、3 ツールとも出典上は存在しない。 変換が前提になる
  • 変換で書式・数式・セル結合は落ちる。 見た目で意味を持たせている表(結合セルの見出しなど)は、変換後に構造が壊れることがある
  • スキャンした PDF(画像だけの PDF)をどう扱うかは出典に記載が無い。 画像として読むことになるが、穴4 の再圧縮が効く
  • 音声を読めるのは Gemini CLI のみ。議事録用途でツールを選ぶ理由になる

根拠

  • facts/claude-code/tools-reference.md — Read の対応形式、PDF の pages、画像の再圧縮、Bash の出力上限
  • facts/gemini-cli/tools.md — read_file の対応形式、read_many_files、@ の起動
  • facts/claude-code/context-window.md — コンテキストの上限とその影響

根拠

公式仕様(facts)

出典のあるページです。原文を確認したい場合はこちらへ。