ToolActToolAct

Excel to SQL 変換ツール

Excel ファイルをアップロードして SQL INSERT 文に変換

Excel ファイルをここにドロップするか、クリックして選択

Excel を SQL に変換とは?

Excel を SQL に変換は、Excel(.xlsx/.xls)ファイルを SQL INSERT 文に変換するオンラインデータ変換ツールです。データベースへのインポートが容易になります。

Excel は最も一般的に使用されるスプレッドシート形式で、データの保存と分析に広く使用されています。SQL はリレーショナルデータベースの標準的な照会言語であり、INSERT 文はデータベーステーブルにデータを挿入するために使用されます。

このツールを使用すると、Excel スプレッドシートデータを実行可能な SQL 文に迅速に変換でき、複数シートの選択、カスタムテーブル名、引用符スタイルをサポートし、データ移行やインポート操作を容易にします。

使い方

使い方

  1. Excelファイル(.xlsxまたは.xls形式)をアップロード
  2. 複数のシートがある場合は、変換するシートを選択してください
  3. テーブル名を設定(デフォルトはtable_name)
  4. 最初の行をフィールド名として使用するかどうかを選択してください
  5. SQL INSERT文が自動生成され、ワンクリックでコピーできます

SQL生成の確認

  • 生成されたSQLを実際のデータベースで実行する前に、列名、データ型、引用符、NULLの処理を確認してください。
  • 本番環境へのインポートでは、まず一時テーブルでテストし、元のスプレッドシートのバックアップを保持してください。

利用シーン

選択したワークブックシートからSQLを生成するExcelファイルをアップロードしてシートを選び、テーブル名を設定すると、ヘッダー名または自動生成のcol1、col2、col3などの列名からINSERT文を生成できます。処理パイプライン全体がデバイス上で実行されるため、ソースのスプレッドシート内容がブラウザ外に送信されることはありません。社内価格表や人事データ、ステージング環境のスナップショットをラップトップの外に出したくない場合に有効です。
対象データベースに合わせた識別子の引用符スタイルを選ぶテーブル名と列名の引用符をバッククォート、ダブルクォート、シングルクォートから切り替えられ、オプションでシンプルな VARCHAR(255) の CREATE TABLE 文を含めることもできます。解析とSQL生成はすべてローカルで行われるため、ドラフトスクリプトを対象データベースで実行する前に列名、データ型、引用符の処理を確認できます。
制限事項を理解したうえでシードデータを準備する変換ツールはセル値をSQL文字列またはNULLとして保持し、シングルクォートをエスケープしますが、型推定、制約、インデックス、日付の意味、トランザクション、バルクロード構文には対応していません。出力をシードデータのドラフトとして扱い、完成したマイグレーションとはしないでください。
対象RDBMSに合った引用符スタイルを選ぶMySQLやSQLiteはバッククォート、PostgreSQLはダブルクォート、SQL Serverは角括弧を好むため、ドロップダウンで一致するスタイルを選択すると、生成されたスクリプトをターゲットコンソールで手修正なしに実行できます。SQLiteはDUAL列コンテキストが暗黙にない場合、ダブルクォートで囲まれた識別子を文字列リテラルとして扱うため、安全なクロス方言のデフォルトはシングルクォート値スタイルとバッククォートまたは角括弧の組み合わせです。型推定も字句ベースのみで、最初の非空セルが1、2、3の列はINTに、2024-01-01で始まる列は日付に見えても文字列としてエクスポートされ、桁区切り付きの金額セルは区切り文字が文字列内に含まれたまま出力されます。
複数行のINSERTをトランザクションで囲むページは1行ごとにINSERT文を出力するため、大量のインポートでは遅く、安全ではありません。数百行以上を本番データベースに投入する場合は、ブロック全体をBEGIN/COMMITで囲むか、エンジンのバルクローダーを使用してください。ヘッダー行の検出は選択シートの最初の非空行を走査し、そのテキストに基づいて `INSERT INTO ... (col1, col2, ...)` を生成します。DATEセルはExcelのシリアル番号規約(1900-01-01からの日数、1900年のうるう年バグにより3月1日が1日ずれるため、25569が1970-01-01のUnixエポックに対応)で読み取られます。再計算されていない数式セルは古い `.value` を保持し、結合セル範囲は左上アンカーのみを公開するため、幅広い結合タイトル行はパーサーからは単一のNULLとして見えます。

仕組み

ページはSheetJSでアップロードされたワークブックを解析します。XLSX.read(arrayBuffer、{type: 'array'})はワークブックオブジェクトを返し、ワークシートはA1キーでインデックスされたセルを持ち、XLSX.utils.sheet_to_json(sheet、{header: 1、defval: null})は範囲!refを配列の配列として走査します。最初の非空行(先頭行をヘッダーとして使用する場合)が列名として使用され、それ以外の場合はSheetJSスタイルのcol1、col2、col3が生成されます。残りの各行はINSERT INTO `table`(`c1`、`c2`、...)VALUES(v1、v2、...);形式の単一SQLステートメントとして出力され、オプションでCREATE TABLE `table`(`c1` VARCHAR(255)、...);が先頭に付加されます。 識別子の引用符付けはSQL方言によって異なり、SQL:1992標準と各ベンダーの逸脱に従います。標準SQLとPostgreSQLは二重引用符("col")で識別子を引用し、MySQLとMariaDBはデフォルトでバッククォート(`col`)を使用し、ANSI_QUOTES SQLモードがオンの場合のみ二重引用符を受け付けます。SQLiteはバッククォートと二重引用符の両方を受け付けます(後方互換性のため、解決できない二重引用符付き識別子は文字列リテラルとして処理されます。SQLiteのQuirksページに文書化された有名な落とし穴です)。SQL ServerとSybaseは角括弧([col])を使用します。値の引用はSQL文字列リテラルルールに従います。単一引用符で囲み、内部の単一引用符は二重化してエスケープします('O'Brien'→'O''Brien')。ISO/IEC 9075準拠。空セルは引用符なしのNULLリテラルにマッピングされます(空文字列''ではありません)。cell.t==='n'の数値セルは引用符なしで出力され、ブール値は方言に応じて1/0またはTRUE/FALSEとなり、日付は明示的な処理が必要です。 日付セルは特別な注意が必要です。SheetJSは基礎となる数値シリアルを保持するためです。Excelは1900-01-01からの日数として日付を格納し、歴史的な1900-02-29のうるう年バグにより1900年3月以前の日付が1日ずれます。Excel for Macの1904システムでは1904-01-01がエポックです。ISO 8601(YYYY-MM-DD HH:mm:ss。MySQL DATETIMEとPostgreSQL TIMESTAMP両方が受け付ける形式)への変換は、Unixエポックからのシリアル-25569×86400000ミリ秒で、UTCでフォーマットされます。型推定は純粋に字句的で浅く、最初の非空セルが整数の列はINT、小数はDECIMAL(10,2)、テキストはVARCHAR(255)となり、2024-01-01で始まる列はソースセルがcell.t==='d'を持たない限り文字列としてエクスポートされます。バルクインサートは1行ごとにINSERTが発行されるため、大規模では遅くなります。100〜500行を単一のINSERT INTO t VALUES(...)、(...)、(...);にまとめるとネットワーク往復が約100倍削減され、スクリプトをBEGIN;...COMMIT;で囲むことで最初の失敗行でロールバックする単一のアトミックトランザクションになります。

  • 方言別の識別子引用符:MySQL/MariaDBは`col`(バッククォート、またはANSI_QUOTES有効時は"col")、PostgreSQLおよび標準SQLは"col"、SQL Serverは[col]。SQLiteは両方を受け付けるが、colが既知の識別子でない場合"col"は暗黙的に文字列リテラルにフォールバックする。
  • 文字列リテラルのエスケープ(ISO/IEC 9075):単一引用符で囲み、内部の単一引用符を二重化(O'Brien→'O''Brien')。生のバックスラッシュをインライン化しないこと。PostgreSQLのstandard_conforming_stringsは9.1以降デフォルトでオン。
  • Excel日付シリアル:1900-01-01からの日数。1900-02-29バグあり(workbook.date1904がtrueの場合は1904-01-01から)。ISO 8601文字列=new Date((serial - 25569) * 86400000).toISOString()。
  • 型推定は字句ベース:整数→INT、小数→DECIMAL(10,2)、テキスト→VARCHAR(255)。日付に見えるがcell.t==='d'でない日付は文字列としてエクスポートされ、桁区切り付きの金額セルは区切り文字が文字列内に含まれたまま出力される。
  • NULL処理:空のExcelセルは引用符なしのNULLになる(''ではない)。NOT NULL列やNULLをスキップして''をカウントするCOUNT(col)にとってこの違いは重要。
  • バルクインサート:100〜500行を単一のINSERT INTO t VALUES(...),(...),...;にまとめると、1行あたり1INSERTと比較してネットワーク往復が約100倍削減。MySQLのmax_allowed_packet(デフォルト64MB)がステートメントサイズの上限となる。
  • 生成スクリプトをBEGIN;...COMMIT;(PostgreSQL/SQLite)またはSTART TRANSACTION;...COMMIT;(MySQL InnoDB)で囲むことで、1行の失敗がバッチ全体をロールバック。MyISAMテーブルはトランザクションを無視し、部分的にコミットする。

使用例

Excel シート → INSERT 文

シート "users" (3 行):
id | name    | email             | age
1  | Alice   | alice@mail.com    | 28
2  | Bob     | bob@mail.com      | 34

生成された SQL:
INSERT INTO users (id, name, email, age) VALUES (1, 'Alice', 'alice@mail.com', 28);
INSERT INTO users (id, name, email, age) VALUES (2, 'Bob', 'bob@mail.com', 34);

複数行をまとめた INSERT 文 (高速インポート)

一括ロード時は「行をまとめる」オプションを使用:

INSERT INTO products (sku, name, price) VALUES
  ('A001', 'USB-C Cable',  9.90),
  ('A002', 'HDMI Adapter', 14.50),
  ('A003', 'Mouse Pad',    4.25);

3 回の往復を 1 回に削減 — 100〜500 行のバッチに最適。

アポストロフィを含む名前のクォートエスケープ

ソースセル: O'Brien

生成された SQL (シングルクォートを二重化):
INSERT INTO customers (id, name) VALUES (42, 'O''Brien');

NULL の扱い — 空の Excel セルは '' ではなく NULL リテラルになる:
INSERT INTO customers (id, phone) VALUES (43, NULL);

インポートをトランザクションで包む

BEGIN;
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1001, 7, 199.50, '2026-06-01');
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1002, 7, 42.00,  '2026-06-02');
INSERT INTO orders (id, customer_id, total, created_at) VALUES (1003, 9, 78.30,  '2026-06-03');
COMMIT;

途中で 1 行でも失敗するとバッチ全体がロールバックされる。

よくある質問

スプレッドシートはアップロードされますか?

いいえ。ファイルは SheetJS を介してブラウザ内で解析され、SQL もローカルで生成されます。サーバーには何も送信されないため、機密データであってもデバイス上に留まります。

どのような SQL が出力されますか?

CREATE TABLE 文に続いて、各行ごとの INSERT INTO 文(1 行 1 ステートメント)が出力されます。生成される SQL では、入力したテーブル名と選択した引用符スタイル(シングルクォート、ダブルクォート、バッククォート)が使用されます。

カラムの型はどのように推論されますか?

ページは各カラムをサンプリングし、適合する最も狭い型(INTEGER、DECIMAL、VARCHAR(N)、BOOLEAN、DATE/DATETIME)を選択します。SQL 生成前に手動で上書きすることもできます。混在型のカラムは VARCHAR にフォールバックします。

Excel の日付はどう扱われますか?

Excel の日付はシリアル番号として保存されています。ページではシートから取得した生の値をそのまま出力します。生成された SQL を確認し、必要に応じて対象データベースの形式に合わせて日付リテラルを調整してください。

特殊文字や引用符はどのようにエスケープされますか?

シングルクォートは二重化されます(Smith's → Smith''s)。バックスラッシュや Unicode はそのまま透過します。これは PostgreSQL の標準準拠文字列に合致します。NO_BACKSLASH_ESCAPES が無効な MySQL を対象とする場合、バックスラッシュを手動でエスケープする必要があるかもしれません。

結果は MySQL、PostgreSQL、SQLite、MSSQL で動作しますか?

基本的な INSERT 文は 4 つすべてで動作します。CREATE TABLE 文では移植性のある型(INT、VARCHAR、DECIMAL、DATE)を使用しています。方言固有の型(SERIAL、AUTO_INCREMENT、IDENTITY)が必要な場合は、対象に合わせて CREATE 文を編集してください。

数式は評価されますか?

いいえ。Excel が保存したキャッシュ値が使用されます。最新の数式結果が必要な場合は、元のワークブックを開き、再計算して保存してから再度アップロードしてください。

関連ツール

CSV to SQL 変換ツール

カスタムテーブル名、区切り文字、引用符スタイルをサポートするオンラインCSV to SQLツール。CSVデータを素早くSQL INSERTステートメントに変換し、データベースへのインポートを容易にします。

Excel to JSON 変換ツール

オンラインExcel to JSONコンバーター。.xlsxおよび.xls形式に対応、複数シート選択対応。スプレッドシートデータをローカルでJSON形式に変換。

SQL フォーマットツール

オンラインSQLフォーマットツール。コード美化、圧縮、キーワード大文字小文字変換、シンタックスハイライトをサポート。ワンクリックでSQLステートメントを整理し、コード可読性を向上。

JSON フォーマットツール

オンラインJSONフォーマットツール。シンタックスハイライト、エラー検出、圧縮・美化をサポート。ワンクリックでJSONデータを美化し、フォーマットエラーを素早く特定し、開発効率を向上させます。

CSV to JSON 変換ツール

カスタム区切り文字と最初の行をヘッダーとして使用するオプションをサポートする無料のオンラインCSV to JSONコンバーター。表形式データを素早くJSON形式に変換。

Word → PDF 変換ツール

オンラインWord→PDF変換ツール。.docxと.doc形式に対応。ワンクリック変換、元のレイアウト保持、PDFサイズ自動最適化。変換後にファイルは自動削除されます。