GitHub の README・Notion・Zenn・Qiita などに表を掲載したいとき、CSV や Excel のデータをそのまま貼り付けることはできません。Markdown テーブル形式に変換する必要があります。

この記事では、CSV・Excel のデータを Markdown テーブルに変換する方法を、手動・自動の両面から解説します。

Markdown テーブルの記法

Markdown テーブルは以下の形式で記述します。

| 列1 | 列2 | 列3 |
|-----|-----|-----|
| A   | B   | C   |
| D   | E   | F   |

ルールは次のとおりです。

列の幅を揃えなくても動作しますが、揃えると可読性が上がります。

列の配置指定

区切り行のコロン(:)の位置で列の配置を指定できます。

| 左揃え | 中央揃え | 右揃え |
|:-------|:-------:|-------:|
| A      |    B    |      C |

CSV から Markdown テーブルへの変換手順(手動)

データ量が少なければ手動でも変換できます。以下の CSV データを例に説明します。

名前,部署,役職
田中太郎,開発部,エンジニア
鈴木花子,営業部,マネージャー
佐藤一郎,人事部,担当

手順

  1. 1行目(ヘッダー)を | 名前 | 部署 | 役職 | の形式に変換する
  2. |-----|-----|-----| の区切り行を追加する(列数に合わせる)
  3. 各データ行を | 田中太郎 | 開発部 | エンジニア | の形式に変換する

変換後の Markdown テーブル:

| 名前 | 部署 | 役職 |
|------|------|------|
| 田中太郎 | 開発部 | エンジニア |
| 鈴木花子 | 営業部 | マネージャー |
| 佐藤一郎 | 人事部 | 担当 |

Excel から変換する方法

Excel のセルをコピーすると、タブ区切り(TSV 形式)でクリップボードにコピーされます。これを利用します。

  1. Excel でコピーしたいセル範囲を選択してコピー
  2. テキストエディタ(メモ帳など)に貼り付けると、タブ区切りのデータが得られる
  3. このタブ区切りデータを変換ツールに貼り付けると Markdown テーブルに変換できる

Google スプレッドシートも同様に、セルをコピーするとタブ区切りでクリップボードに入ります。

プログラムで変換する方法

Python

import csv
import io

def csv_to_markdown(csv_text):
    reader = csv.reader(io.StringIO(csv_text.strip()))
    rows = list(reader)
    if not rows:
        return ""

    # ヘッダー行
    header = "| " + " | ".join(rows[0]) + " |"
    # 区切り行
    separator = "| " + " | ".join(["---"] * len(rows[0])) + " |"
    # データ行
    data = "\n".join("| " + " | ".join(row) + " |" for row in rows[1:])

    return "\n".join([header, separator, data])

csv_text = """名前,部署,役職
田中太郎,開発部,エンジニア
鈴木花子,営業部,マネージャー"""

print(csv_to_markdown(csv_text))

JavaScript

function csvToMarkdown(csv) {
  const rows = csv.trim().split('\n').map(row => row.split(','));
  const header = '| ' + rows[0].join(' | ') + ' |';
  const separator = '| ' + rows[0].map(() => '---').join(' | ') + ' |';
  const body = rows.slice(1)
    .map(row => '| ' + row.join(' | ') + ' |')
    .join('\n');
  return [header, separator, body].join('\n');
}

const csv = `名前,部署,役職
田中太郎,開発部,エンジニア
鈴木花子,営業部,マネージャー`;

console.log(csvToMarkdown(csv));

シェルスクリプト(awk)

awk -F',' '
  NR==1 {
    printf "| "
    for(i=1; i<=NF; i++) printf "%s%s", $i, (i1 {
    printf "| "
    for(i=1; i<=NF; i++) printf "%s%s", $i, (i

TSV(タブ区切り)から変換する場合

Excel や Google スプレッドシートからコピーしたデータはタブ区切り(TSV)です。区切り文字をタブに変えるだけで対応できます。

# Python: TSV → Markdown テーブル
def tsv_to_markdown(tsv_text):
    rows = [row.split('\t') for row in tsv_text.strip().split('\n')]
    header = "| " + " | ".join(rows[0]) + " |"
    separator = "| " + " | ".join(["---"] * len(rows[0])) + " |"
    data = "\n".join("| " + " | ".join(row) + " |" for row in rows[1:])
    return "\n".join([header, separator, data])

注意点:特殊文字のエスケープ

CSV のセル内に |(パイプ)が含まれる場合、Markdown テーブルのパーサーが列の区切りと誤認識します。この場合は \| にエスケープする必要があります。

# パイプを含むデータ
| コマンド | 説明 |
|----------|------|
| ls \| grep .txt | .txt ファイルの一覧 |  ← \| でエスケープ

また、改行を含むセルは標準の Markdown テーブルでは表現できないため、改行を別の表現(スペースや <br>)に変換する必要があります。

ツールで変換する

手動変換やコード記述が不要な場合は、オンライン変換ツールを使うのが最も手軽です。CSV・TSV・HTML テーブルを貼り付けるだけで Markdown テーブルに変換できます。

テーブル変換ツール(CSV / TSV / HTML → Markdown) 貼り付けるだけで自動変換。列配置(左/中央/右)の指定にも対応。
ツールを使う →

まとめ

  • Markdown テーブルは | で列を区切り、2行目に区切り行(---)を入れる形式
  • Excel・Google スプレッドシートからのコピーはタブ区切り(TSV)で得られる
  • Python・JavaScript いずれもシンプルなコードで CSV → Markdown 変換が実装できる
  • セル内に | が含まれる場合は \| にエスケープが必要
  • ツールを使えばコードなしでワンクリック変換できる
関連記事