セルが実際に保存しているもの
表計算のセルには、別々の2つのものが入っています。値と表示形式です。0.15という値は15%とも、0.15とも、£0.15とも、15.00%とも表示でき、どう表示しても値は少しも変わりません。これは表計算について最も役に立つ事実であり、Excel CSV変換が推測に頼らず「Excelでの表示どおり」と「元の数値、ISO形式の日付」のどちらかを選ばせる理由でもあります。「Excelでの表示どおり」は、15/03/2024、1,234.50、12%のように画面上のテキストをそのまま書き出します。これはExcel自身の「名前を付けて保存」と同じ動作で、人がCSVを読むときに期待する形です。「元の数値、ISO形式の日付」はプレーンな数値とISO形式の日付を書き出します。こちらはデータベースやスクリプトが期待する形です。選び間違えると、データが壊れているように見える形でインポートが失敗します。
日付は、日付のふりをした数値です。日付のセルには通し番号の日数が入っており、何日を起点に数えるかはファイルによって異なります。Windows版Excelで作られたブックは1900年から、旧Mac版Excelのブックは1904年から数え、両者の差は1,462日です。1900年方式はさらに奇妙で、1900年2月29日が存在したことになっています。Lotus 1-2-3から引き継がれ、互換性のためにずっと残されてきたバグです。ここのツールはブックごとの起点フラグを読み取り、この存在しない閏日も正しい位置に再現します。そのため、ここで変換した日付は4年と1日ずれることなく、Excelの表示と一致します。
数式とその結果は並べて保存されています。ブックには数式のテキストと、最後に計算された値の両方が入っています。ブック同士の変換(ODS XLSX変換、XLS XLSX変換、XLSX ODS変換)では、数式そのものを2つの関数体系の間で翻訳して引き継ぐので、編集すれば引き続き再計算されます。片方にしか存在しない一部の関数は、置き換えるまで#NAME?と表示されます。一方、表計算の世界から出ていく変換(CSV、JSON、XML)では、計算結果だけが書き出されます。これらの形式には数式という概念がまったくないからです。
CSVではブックの大部分を表現できません。表現できるふりをすると、そこでデータが失われます。CSVにはシートがないので、シートごとに別々のファイルになります(すべて欲しければZIPにまとめます)。セルの型もないので、何かが推測するまではすべての項目がテキストです。表示形式も、数式も、グラフも、画像も、色も、列幅もありません。結合セルはどちらかに決めて解消する必要があります。先頭のセルに値を入れるか、結合範囲全体に同じ値を繰り返すかです。さらにCSVは自分の区切り文字、小数点記号、文字コードを記録しません。そのため、小数点にカンマを使うヨーロッパのセミコロン区切りファイルは米国版Excelでは1列に収まってしまい、ファイルの先頭にBOM(バイトオーダーマーク)がなければアクセント付きの文字は文字化けします。
数値に見えるテキストこそ、本当の被害が起きる場所です。CSVを開くと、Excelはセルごとに推測します。郵便番号01234は先頭のゼロを失い、16桁の注文IDは1.23457E+15になって元に戻せなくなり、遺伝子名SEPT2は日付になります。この問題は深刻で、遺伝学の分野では遺伝子の名前そのものが変更されたほどです。CSV Excel変換は代わりに列ごとに1回、その列のすべての値から判断し、列全体が一致したときだけ変換します。先頭にゼロがあるものや、JavaScriptの数値で正確に保持できないほど長い整数はテキストのまま残ります。JSON CSV変換も逆方向で同じ配慮をしており、ほとんどの変換ツールが丸めてしまう64ビットのIDを1桁ずつそのまま写します。
JSONとXMLにも、それぞれ失われるものがあります。JSONには日付型がまったくないため、日付はテキストとして運ばれ、受け取る側のコードがそれが何かを知っている必要があります。データ用のXMLは値だけを運び、書式、グラフ、画像は含みません。インポート用のフィードにはまさに必要な形ですが、ブックをそのまま残したいのであれば向いていません。
ブラウザが本当に適さない場面
このうち7つのツールは、ファイルをどこにも送りません。Excel CSV変換、CSV Excel変換、CSV JSON変換、JSON CSV変換、XML Excel変換、Excel XML変換、PDF Excel変換です。何も保存されないので、給与データや顧客リストのようなファイルでも安心です。4つは異なります。Excel PDF変換、ODS XLSX変換、XLS XLSX変換、XLSX ODS変換はファイルを当サイトのサーバーに渡します。印刷ページのレイアウトや、フォント、色、条件付き書式、グラフを形式間で引き継ぐことは、Webページでは再現しきれないからです。これらのファイルは暗号化された接続で送信されて変換され、ダウンロードの準備ができた時点で削除されます。サーバーに接続できない場合は、それぞれ独自の変換処理に切り替わります。この場合、値、数式、表示形式、結合セル、列幅は保たれますが、フォント、色、グラフは保たれず、そのことをお知らせします。
サイズ。ブラウザで動くツールは表全体をメモリに保持するため、上限はタブが使えるメモリ量です。数十MBまでは快適、100 MBを超えると厳しく、数GBの抽出データは無理です。ブック変換ツールはファイルあたり50 MB、Excel PDF変換は40 MBが上限で、どちらも変換の後ではなく前にそう表示します。Excelのシート自体も1,048,576行までで、これは当サイトではなく形式の制限です。CSV Excel変換はデータを黙って切り捨てず、見出し行を繰り返して追加のシートに続けます。
本格的なデータ処理。変換ツールはデータベースではありません。2つの表の結合、重複の除去、集計、1,000万行のフィルターリング、乱雑なエクスポートデータの分析は、そのために作られたツールの仕事です。無料のものでも非常に優秀です。コマンドラインで手早くCSVを加工するならcsvkit、JSONとCSVを同様に扱うならMiller、巨大なファイルを高速に処理するならqsv、CSVやParquetファイルに直接SQLを実行するならDuckDB、すでにPythonを使っているならpandasです。
マクロなど、実行されるもの。VBAは.xlsxには引き継げません。そもそも入れる場所がないからです。.odsにも引き継ぎません。LibreOfficeはVBAの一部しか実行できず、違いがエラーではなく間違った数値として現れてしまうからです。ブックがマクロに依存している場合は、変換後のファイルと一緒に元のファイルも残しておいてください。パスワードで保護されたファイルは、設定したプログラムで先にパスワードを解除する必要があります。
自動化。これらのツールは、人がクリックしたときに動きます。毎晩届くフィードの変換はコマンドラインの仕事です。ヘッドレスモードのLibreOfficeなら、このページのすべての形式を扱えます。
似た名前のツールの選び方
Excel CSV変換とExcel XML変換。どちらもブックを読み込んでフラットなデータファイルを書き出すもので、送り先で決まります。CSVは表計算ソフト、データベース、そして「CSVをアップロード」と書いてあるあらゆる場所向けです。XMLは要素名が指定されたインポートや連携向けで、ルート名と行の名前を設定でき、見出しが要素名になり、値はプレーンな数値とISO形式の日付で出力されます。Excel XML変換はXML Spreadsheet 2003も書き出せますが、これはまったく別物で、Excelがブックとして開き直せる形式です。独自のデータ用XMLではなく「Excel XML」を求められたときに使います。
CSV Excel変換とCSV JSON変換。同じパーサー、同じ列ごとの型判定で、出力だけが違います。CSV Excel変換は、合計や並べ替えができる本物の日付と数値、固定されたフィルター付きの見出し行を持つ.xlsxを作ります。人が使うためのものです。CSV JSON変換は、オブジェクトの配列、配列の配列、キー付きオブジェクト、JSON Linesを作ります。コードが使うためのものです。答えが「両方」なら、人向けにExcel、処理向けにJSONへ変換してください。列の型は同じ方法で決まるので、両者の内容は一致します。
XML Excel変換とExcel XML変換。単に逆方向というわけではありません。XML Excel変換は、まず表を見つける必要があります。同じ親の下で繰り返される要素(カタログ内のすべての<book>、RSSフィード内のすべての<item>)を探し、グループごとに評価して、残りの候補もワンクリックで選べるようにしたうえで、属性や入れ子の要素をパス名の列に展開します。Excel XML変換には探す作業がありません。行がすでにレコードそのものだからです。
XLS XLSX変換とCSV Excel変換。どちらも最終的には最新形式のブックになります。XLS XLSX変換は本物のExcel 97〜2003バイナリファイルを更新し、シート、数式、書式、グラフなど中身をすべて保ちます。CSV Excel変換は、もともとそのどれも持たないプレーンテキストからブックを作ります。厄介なのはその中間のケースです。多くのWebアプリはHTMLの表やXMLファイルを書き出して.xlsという名前を付けます。XLS XLSX変換はそれらの正体を見抜き、本物のブックとして保存します。
PDF Excel変換とExcel PDF変換。逆方向で、確実なのは片方だけです。Excel PDF変換はレイアウトの作業です。ブックは印刷範囲、改ページ、書式をすでに持っており、変換ツールはそれを描画します。PDF Excel変換は難しい方向です。PDFは各文字がどこに描かれたかを記録しているだけで、どのセルに属していたかは何も記録していないため、列は位置から推測します。罫線のあるきれいな表ならうまくいきますが、セルが結合されていたり複数行に折り返されていたりする箇所は手直しが必要です。書式や数式ではなく値を再現し、PDFの1ページを1シートにします。元のブックがまだあるなら、それを送ってもらいましょう。
.odsファイルにはODS XLSX変換とExcel CSV変換のどちらを使うか。Excel CSV変換は.odsも問題なく開き、値を取り出せます。ODS XLSX変換は数式、書式、グラフを含め、ブックをブックのまま保ちます。誰かがそのファイルで作業する必要があるなら変換ツールを、システムが数値だけを必要としているならCSVを使ってください。