TSV → Markdown表 変換メモ

目的

ExcelからコピーしたTSV形式の表を、クリップボード内でMarkdownの表記法(| 区切り)に変換(要VSCode)

  • 全角文字にも対応
  • 列ごとの寄せ方向(左寄せ・中央寄せ・右寄せ)指定可能

準備

Node.js スクリプト

format_tsv_markdown.js を作成:

const clipboardy = require("clipboardy");
 
// 列の寄せ方向を指定("left" / "center" / "right")
const alignments = ["center", "left", "right", "right"]; // 列数に合わせて調整
 
// 文字の表示幅(全角2、半角1)
function displayWidth(str) {
  return str.split("").reduce((sum, ch) => sum + (ch.charCodeAt(0) > 255 ? 2 : 1), 0);
}
 
// 指定幅で文字列を整形
function pad(str, width, align) {
  const w = displayWidth(str);
  const space = width - w;
  if (align === "right") return " ".repeat(space) + str;
  if (align === "center") {
    const left = Math.floor(space / 2);
    const right = space - left;
    return " ".repeat(left) + str + " ".repeat(right);
  }
  return str + " ".repeat(space); // left
}
 
// TSV取得
let raw = clipboardy.readSync().replace(/\r\n/g, "\n");
let lines = raw.trim().split("\n").map(line => line.split("\t"));
 
// 最大列数の確認と列幅計算
let colCount = Math.max(...lines.map(cols => cols.length));
let colWidths = Array(colCount).fill(0);
 
lines.forEach(cols => {
  cols.forEach((cell, i) => {
    const w = displayWidth(cell);
    if (w > colWidths[i]) colWidths[i] = w;
  });
});
 
// Markdown表の作成
let out = "";
 
// ヘッダ行
out += "| " + lines[0].map((cell, i) => pad(cell, colWidths[i], alignments[i] || "left")).join(" | ") + " |\n";
 
// 区切り行
out += "|" + colWidths.map((w, i) => {
  const a = alignments[i] || "left";
  if (a === "right") return "-".repeat(w + 1) + ":";
  if (a === "center") return ":" + "-".repeat(w) + ":";
  return "-".repeat(w + 2); // left
}).join("|") + "|\n";
 
// データ行
for (let r = 1; r < lines.length; r++) {
  const row = lines[r].map((cell, i) => pad(cell, colWidths[i], alignments[i] || "left"));
  out += "| " + row.join(" | ") + " |\n";
}
 
// 出力
clipboardy.writeSync(out);
console.log("✓ Markdown表形式に変換してクリップボードにコピーしました。"); // 安定して動くようになったらこの行削除

package.json の初期化 & clipboardy のインストール

npm init -y
npm install clipboardy@2

clipboardyのインストールではうまくいかなかったため、バージョン2を指定してインストール

タスク設定(.vscode/tasks.json)

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "TSVをMarkdown表に変換",
      "type": "shell",
      "command": "node ${workspaceFolder}/format_tsv_markdown.js",
      "problemMatcher": [],
      "presentation": {
        "reveal": "never",
        "panel": "shared"
      }
    }
  ]
}

キー割り当て(keybindings.json)

[
  {
    "key": "ctrl+alt+t",
    "command": "workbench.action.tasks.runTask",
    "args": "TSVをMarkdown表に変換"
  }
]

利用手順

  • Excelで表にしたい部分を範囲指定してコピー
    1. VSCodeのMarkdownファイルを開く
      - 変換して貼り付けたい場所で Ctrl+Alt+T を押す
      - 自動でクリップボードに整形済みのMarkdown表が入る
      - そのまま Ctrl+V で貼り付け
    2. プレビューで確認

    備考

  • 全角・半角の混在に対応
  • 寄せ方向の変更は alignSpec を編集
memo/markdown/tsv_markdown.txt · 最終更新: by nfujishima
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0