Excel ファイルを Base64 に変換する方法
.xlsx、.xls、.csvファイルを枠にドロップするか、ファイル選択で選びます。- 出力形式 は最初 プレーン Base64 になっています。ファイル名、MIME タイプ、サイズも含めるなら JSON を選んでください。
- 出力をコピー するか、大きなブックなら .txt で保存 を使います。
どの表計算ファイルか見分ける
| ファイル | Base64 の先頭 | MIME タイプ |
|---|---|---|
.xlsx、.xlsm | UEsDB(ZIP) | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
.xls | 0M8R4KGxGuE(OLE2) | application/vnd.ms-excel |
パスワード付き .xlsx | 0M8R4KGxGuE | .xlsx と同じ |
.csv(UTF-8、BOM あり) | 77u/ | text/csv |
.csv(BOM なし) | テキストそのもの。たとえば name,qty と改行なら bmFtZSxxdHkK | text/csv |
Data URI と JSON の出力には、ブラウザが報告するタイプが使われます。Excel がインストールされた Windows パソコンでは、システムが .csv ファイルを application/vnd.ms-excel と判定することがよくあります。API が CSV のタイプに厳しい場合は、手で text/csv に書き換えてください。
CSV はただのテキスト
CSV ファイルはプレーンテキストなので、その Base64 をデコードすると読める行が出てきます。そこからいくつかのことが言えます。
- 文字コードはバイト列と一緒に運ばれます。Excel が Windows-1252 のようなレガシーなコードページで保存した CSV は、受信側が UTF-8 だと思い込むと文字化けします。保存するときは「CSV UTF-8」を選ぶのがおすすめです。
- 大きな CSV は gzip や ZIP でかなり小さくなるので、API が圧縮したアップロードを受け付けるならエンコード前に圧縮する価値があります。
.xlsxはすでに ZIP なので、もう一度圧縮してもほとんど縮みません。 - Base64 で受け取った CSV をさっと確認するなら、Base64 を CSV に変換 でデコードしてテキストとして表示できます。
表計算ファイルが Base64 でやり取りされる場面
- レポート API やインポート API:商品や価格の一括インポートなどで、JSON 本文にブックを入れて受け取るもの。
- 自動化プラットフォーム:メールの添付ファイルを読み取ってストレージにアップロードするなど、ステップ間でファイルを Base64 文字列として渡すもの。
- メール送信 API:スプレッドシートの添付ファイルを Base64 にして JSON のフィールドで受け取るもの。
- 生成した HTML のダウンロードリンク:HTML
<a download>出力を使えば、レポートのページに自前の.xlsxを持たせられます。
Python でエンコードして形式を確認する
import base64
from pathlib import Path
SIGNATURES = {
"UEsDB": "xlsx (ZIP)",
"0M8R4KGxGuE": "xls (OLE2) or encrypted xlsx",
"77u/": "text with a UTF-8 BOM, e.g. CSV UTF-8",
}
def encode_sheet(path):
b64 = base64.b64encode(Path(path).read_bytes()).decode("ascii")
kind = next((v for k, v in SIGNATURES.items() if b64.startswith(k)), "other")
return b64, kind
このようなチェックで、よくあるアップロードのミスを見つけられます。実は HTML のエラーページだった「表計算ファイル」や、.xlsx にリネームされただけの古い .xls です。ファイルの扱いについては Python の Base64 を、Base64 のブックをプレビューしてファイルとして保存するには Base64 を Excel に変換 をご覧ください。
よくある質問
XLSX ファイルの MIME タイプは何ですか?
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet です。旧形式の .xls は application/vnd.ms-excel、CSV は text/csv を使います。
CSV の Base64 が 77u/ で始まるのはなぜですか?
77u/ は UTF-8 のバイトオーダーマーク(EF BB BF)です。Excel で「CSV UTF-8」として保存すると付きます。たいていのパーサーは処理できますが、最初の列名の一部として扱うものもあるので、name のようなヘッダーが一致しなくなったら取り除いてください。
Excel ファイルを JSON リクエストで送れますか?
送れます。プレーン Base64 にエンコードし、API のドキュメントにあるファイル内容のフィールドに、ファイル名と MIME タイプと一緒に入れてください。出力形式 JSON を選ぶと name、type、size、data という形が確認できます。