Office→PDF/HTML→AI
Claudeに読ませるための資料形式、最適解はどれ?
こんにちは。この記事では、AIによるドキュメント生成を進める中で直面した「ファイル形式の壁」についてまとめています。
特に、Microsoft Office製の設計資料をAI(Claude)に渡す際、 どう変換すればうまく読み込んでもらえるのか? という課題に取り組んだ記録です。
背景:ドキュメントをAIに読ませたい!
自社プロジェクトでは、ChatGPTやClaudeなどの大規模言語モデル(LLM)を活用して、プロジェクト新規参画者向けの「設計ドキュメント自動生成」に挑戦しています。
プロジェクト概要や設計意図、データフロー図などをもとに、テンプレート形式で情報をAIに渡し、整った出力を得るのが目的です。
ステップ1:まずはPDF化してみたけれど…
WordやExcelの元資料をそのままAIに渡すことは難しいため、まずはPowerShellでPDFに変換するスクリプトを作成。以下のような処理を行いました:
- フォルダ内のOfficeファイルを再帰的に読み込み
- 差分検知により更新されたファイルのみ変換
- 出力先フォルダを指定して保存
param (
[string]$sourceFolder = ".\SWP-SharePoint",
[string]$outputFolder = ".\SWP-SharePoint_PDF"
)
# 絶対パス化
$sourceFolder = [System.IO.Path]::GetFullPath($sourceFolder)
$outputFolder = [System.IO.Path]::GetFullPath($outputFolder)
# 出力フォルダ作成
if (-not (Test-Path $outputFolder)) {
New-Item -ItemType Directory -Path $outputFolder -Force | Out-Null
}
# Officeアプリ起動
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
$ppt = New-Object -ComObject PowerPoint.Application
$word = New-Object -ComObject Word.Application
$word.Visible = $false
# 拡張子ごとの対応形式
$extensions = @("*.docx", "*.doc", "*.xlsx", "*.xls", "*.pptx", "*.ppt")
foreach ($ext in $extensions) {
$files = Get-ChildItem -Path $sourceFolder -Recurse -Filter $ext
foreach ($file in $files) {
$relativePath = $file.FullName.Substring($sourceFolder.Length).TrimStart('\')
$relativeFolder = Split-Path $relativePath
$pdfSubFolder = Join-Path $outputFolder $relativeFolder
$pdfSubFolder = [System.IO.Path]::GetFullPath($pdfSubFolder)
if (-not (Test-Path $pdfSubFolder)) {
New-Item -ItemType Directory -Path $pdfSubFolder -Force | Out-Null
}
$pdfFileName = [System.IO.Path]::GetFileNameWithoutExtension($file.Name) + ".pdf"
$pdfPath = Join-Path $pdfSubFolder $pdfFileName
$pdfPath = [System.IO.Path]::GetFullPath($pdfPath)
# 差分更新:元ファイルが古ければスキップ
if ((Test-Path $pdfPath) -and ((Get-Item $pdfPath).LastWriteTime -gt (Get-Item $file.FullName).LastWriteTime)) {
Write-Host "Skipped (up-to-date): $pdfPath"
continue
}
switch ($file.Extension.ToLower()) {
".xlsx" {
$wb = $excel.Workbooks.Open($file.FullName, 0, $true)
$wb.ExportAsFixedFormat(0, $pdfPath)
$wb.Close($false)
}
".xls" {
$wb = $excel.Workbooks.Open($file.FullName, 0, $true)
$wb.ExportAsFixedFormat(0, $pdfPath)
$wb.Close($false)
}
{ $_ -in @(".docx", ".doc") } {
$doc = $word.Documents.Open($file.FullName, [ref]$false, [ref]$true)
$doc.ExportAsFixedFormat($pdfPath, 17)
$doc.Close([ref]$false, [ref]$null, [ref]$null)
}
{ $_ -in @(".pptx", ".ppt") } {
$pres = $ppt.Presentations.Open($file.FullName, $false, $false, $false)
$pres.SaveAs($pdfPath, 32)
$pres.Close()
}
}
Write-Host "Converted: $($file.FullName) => $pdfPath"
}
}
# Office終了とメモリ解放
$word.Quit()
$excel.Quit()
$ppt.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ppt) | Out-Null
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
Write-Host "`n✅ PDF変換が完了しました。"
一見、うまくいきそうでしたが……Claudeに読ませてみると、表の途中で切れる・ページまたぎで構造が崩れるといった問題が発生。PDFは人間には見やすいが、AIには「読みづらい」形式だということが判明しました。
ステップ2:HTML形式にしてみたら、突破口が!
次に試したのが、OfficeファイルのHTML化です。これにより、以下のメリットがありました:
- 表の構造が保たれる
- 段落やリストの論理構造が明確
- Claudeが正しく意味を理解しやすい
特にExcel資料では、PDFでは表が崩れてしまっていたのが、HTMLでは正確にテーブル構造が伝わるようになり、大幅に改善されました。
ステップ3:Markdown化も検討してみたけれど…
チーム内では、「MarkdownのほうがAIと相性が良いのでは?」という意見も出ました。
ただ、OfficeファイルをMarkdownに変換するには構文の理解やタグの最適化が必要で、PowerShellでの自動変換にはまだハードルがありました。
また、画像や図表が多い資料の場合、Markdownでは情報が不足しがちだったため、今回はHTMLを採用しました。
学びと今後の方針
- ClaudeはPDFの構造理解が苦手(特に表や段組)
- HTML化が最も安定した成果を得られる
- Markdown化は将来的なチャレンジ課題として有望
今後は、さらにドキュメント構造に強い形式を自動変換できるよう、AIに最適な資料形式変換プロセスを整備していく予定です。
まとめ:AIに渡す“素材”が、成果を左右する
AIによるドキュメント自動生成は確かに便利ですが、元の情報の渡し方次第でアウトプットの質は大きく変わることがよく分かりました。
単なるAI活用ではなく、「AIと人間の協業」を成立させるには、こうした前処理や資料の工夫が非常に重要だと感じています。
最後に:使った技術・ツール
- ChatGPT & Claude
- PowerShellによるPDF変換スクリプト
- Office→HTML変換(手動+ツール併用)
- VSCode + RooCodeでの対話型プロンプト生成
形式にこだわると、AIはもっと賢くなる。
資料の中身だけでなく、"どう見せるか"にも目を向けてみませんか?