システムから report.xls がメールで届き、ダブルクリックすると Excel が警告を表示しました:
'report.xls' のファイル形式と拡張子が一致しません。 とにかく開くと、正常に動作するか、画面がマークアップで埋め尽くされます。代わりに Excel ビューア にアップロードしてください — ファイルの実体を読み取ります。XLS、XLSX、CSV、ODS、そしてマクロ、バイナリ、テンプレートの各バリエーションは、最大 20 MB までで、タブを閉じると削除されます。

拡張子は主張であり、事実ではない
プログラムが好きなバイトを書き込み、その結果に .xls という名前を付けることを妨げるものは何もなく、多くのプログラムが実際にそうしています。レポートツール、ERP、銀行ポータル、管理パネルはすべて「Excel にエクスポート」を提供しますが、その機能を実装する最も安価な方法は、別の形式のデータを出力し、Excel 拡張子を付けることです。なぜなら Excel は通常それを開くからです。
Excel 2007 以降、ファイルは開く前にチェックされます。これが警告の原因です。これは破損メッセージではなく、Excel が名前が間違っていることを伝えているだけです。
実際に何があるかを確認する
テキストエディタ(Notepad で構いません)でファイルを開き、最初の行を確認してください。5 つのパターンがほぼすべてを占めています。
<html,<head>または<table— スプレッドシート名が付いた HTML テーブルです。ブラウザやウェブレポートが常に生成します。<?xml— SpreadsheetML、Excel 2003 が書き出す XML ワークブック形式です。PK— ZIP アーカイブで、拡張子が間違っている実際の XLSX(または ODS、DOCX)です。- バイト列
D0 CF 11 E0で始まる読めないバイナリ — 2007 年以前の本物の XLS です。これが実際の形式です。 - カンマ、セミコロン、タブで区切られたプレーンテキスト — カンマ、セミコロン、タブで区切られたプレーンテキストファイルで、他人の名前をかぶった CSV です。
各偽装ファイルがもたらすコスト
知っておくべき点は、失われるものがそれぞれ異なることです。
HTML テーブル は値と一部の書式を保持しますが、数式は全くありません。エクスポートシステムが計算した結果を書き出しただけです。再計算する基礎がなく、転送中に失われたものはありません — 書き込まれたことがなかったのです。
SpreadsheetML は数式とセルの書式を保持します。ただし、チャートやピボットテーブルは保持できません。フォーマットにそれらを保存する手段がないため、ファイルを書き出す際に除外され、開いたときに失われたわけではありません。
名前が間違っている XLSX は何も失いません。完全な最新のブックで、唯一の問題はファイル名が 6 文字違うだけです。
区切りテキストファイル は値だけで、他には何もありません:数式も書式も第2シートもありません。もしカンマで区切られた1列のテキストのように見える場合、区切り文字が Excel の設定と合っていなかったということです。
一度だけの修正方法
保持したいものがある場合は、警告を無視して Excel で開き、[ファイル] → [名前を付けて保存] → Excel ブック (.xlsx) を選択します。これで実際のブックが得られ、警告は永遠に消えます。
名前が間違っている XLSX については、名前を変更して終了してください。名前変更は変換ではなく、ほとんどの場合役に立ちません — ただし、このケースは例外で、内容がすでに正しかったため有効です。
偽装ではないもの
.xlsb は怪しげに見えますが、実際はそうではありません。圧縮された XML ではなくバイナリで保存された本物の Excel ブックです:データは同じで、サイズはかなり小さく、大規模なモデルでも高速に開きます。同僚から送られてきても、問題はありません。
ファイルが何であれ、Excel ビューア が開いてシートを表示します。