TL;DR
このエラーは、ファイルの拡張子が実際の内部フォーマットと一致しない場合、またはファイルが部分的に破損している場合に発生します。最速の修正方法:拡張子を実際のフォーマットに合わせてリネームするか、ファイル → 開く → 開いて修復を使用してください。
発生するケース
.xlsxファイル — または.xls、.csv、.xlsm — をダブルクリックすると、Excelが即座に以下のポップアップを表示します:
The file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file.
主な原因は以下の通りです:
- ファイルを
.xlsxとして保存したが、中身が実際にはCSVまたはHTML形式だった - ダウンロードが途中で切れ、不完全なファイルがディスクに残っている
- 誤った拡張子で手動リネームされた(
.csvを.xlsxに偽装するなど) - ERP・レポートシステムなどのサードパーティツールが非標準フォーマットで書き出し、Excelの拡張子を付けた
- ウイルス対策ソフトやエンドポイントセキュリティソフトがスキャン中にファイルのバイトを書き換えた
修正1:ファイルの実際の形式を確認する
推測はやめましょう。まず実際のフォーマットを確認してください — 10秒で完了し、どの修正方法を使うべきか正確にわかります。
# Windows (PowerShell)
Format-Hex -Path "yourfile.xlsx" | Select-Object -First 2
# macOS / Linux
file yourfile.xlsx
xxd yourfile.xlsx | head -3
正常な.xlsxファイルは以下のように表示されます:
yourfile.xlsx: Zip archive data # xlsxは内部的にZIP形式
# Hex: PK\x03\x04 (50 4B 03 04)
HTML documentやASCII textと表示された場合、そのファイルは最初からExcel形式ではありません。単に拡張子が間違っているだけです。
実際のフォーマットに合わせてリネームする
# `file` コマンドがHTMLと報告した場合:
cp yourfile.xlsx yourfile.html
# ブラウザで開き、データをコピーして新しいExcelシートに貼り付ける
# 実際にCSVの場合:
cp yourfile.xlsx yourfile.csv
# Excelで通常通り開く
修正2:開いて修復(Excelの組み込みツール)
拡張子は正しいのにファイルが開けない場合は、部分的に破損している可能性があります。Excelには組み込みの修復ツールがありますが、場所を知らない方も多いです。
- まずExcelを起動します — ファイルをダブルクリックしないでください
- ファイル → 開く → 参照に移動します
- ファイルを選択し、「開く」ボタン横のドロップダウン矢印をクリックします
- **開いて修復…**を選択します
- まず修復を試します。失敗した場合はデータの抽出を選択します
このツールは驚くほど効果的です — ExcelがコアのZIP構造を読み取れる限り、データを復元できます。
修正3:.xlsxを手動で解凍する
多くのユーザーが知らないことですが、.xlsxファイルは内部にXMLが入ったZIPアーカイブに過ぎません。直接展開することができます:
# リネームして展開
cp yourfile.xlsx yourfile.zip
unzip yourfile.zip -d extracted_excel/
ls extracted_excel/
正常な.xlsxファイルの内部構造は以下のようになります:
extracted_excel/
├── [Content_Types].xml
├── _rels/
├── xl/
│ ├── workbook.xml
│ ├── worksheets/
│ └── sharedStrings.xml
└── docProps/
xl/が存在しない、またはunzipで「end-of-central-directory」エラーが発生した場合、ファイルは本当に破損しています。修正4に進んでください。
修正4:Pythonでデータを抽出する
Excelが諦めても、Pythonは諦めないことがよくあります。部分的に破損したファイルでもプログラムで読み取れる場合があり、データを救出できます。
pip install openpyxl pandas
import pandas as pd
try:
df = pd.read_excel("yourfile.xlsx", engine="openpyxl")
print(f"Recovered {len(df)} rows")
df.to_excel("yourfile_clean.xlsx", index=False)
except Exception as e:
print(f"Failed: {e}")
# 実際には拡張子が間違ったCSVファイル?
df = pd.read_csv("yourfile.xlsx")
df.to_excel("yourfile_clean.xlsx", index=False)
出力されたyourfile_clean.xlsxは新しい有効なファイルで、元ファイルの構造的な損傷が取り除かれています。
修正5:以前のバージョンを復元する
OneDrive、SharePoint、またはWindowsのシャドウコピーを使用している場合、クリーンなバージョンがすでに存在している可能性があります。
# Windows — シャドウコピーを確認
ファイルを右クリック → プロパティ → 以前のバージョン タブ
OneDriveの場合:Webインターフェースでファイルを開き、上部メニューのバージョン履歴をクリックして、破損前のバージョンを復元します。バージョン履歴は個人プランで30日間、Microsoft 365 Businessで180日間保持されます。
修正6:再ダウンロードまたは再エクスポート
ダウンロードの途中切れは、このエラーで最も多い原因です。ファイルを再取得するだけで解決します。合わせて、ファイルサイズをサーバーが報告するサイズと比較してみてください — 本来2.3 MBのはずが45 KBになっていれば一目瞭然です。
社内システムからエクスポートしたファイルの場合:エクスポートジョブを再実行してください。ERPやレポートツールはファイル書き込みの途中でクラッシュすることがあり、正常に見えても壊れたスタブファイルがディスクに残ることがあります。
確認
修正を適用したら、すべてが正常に機能していることを確認してください:
- Excelが警告ダイアログなしにファイルを開く
- すべてのシート、データ、書式が存在する
file yourfile.xlsxを実行してZip archive dataと報告されることを確認する- Pythonを使用した場合、行数を確認する:
print(len(df))がソースの期待値と一致しているか確認する
今後の予防策
- コードでExcelファイルを生成する場合は
openpyxlまたはxlsxwriterを使用してください — CSVを.xlsxにリネームするだけで済ませてはいけません - ファイル転送やダウンロード後は必ずファイルサイズを確認し、重要なパイプラインには
sha256sumによる検証を追加してください - サードパーティからのエクスポートの場合、エンドユーザーに届く前に出力フォーマットを自動検証してください — 誰かの受信トレイではなく、パイプライン内で問題を検出しましょう

