===== 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で表にしたい部分を範囲指定してコピー
- VSCodeのMarkdownファイルを開く
- 変換して貼り付けたい場所で `Ctrl+Alt+T` を押す
- 自動でクリップボードに整形済みのMarkdown表が入る
- そのまま `Ctrl+V` で貼り付け
- プレビューで確認
==== 備考 ====
* 全角・半角の混在に対応
* 寄せ方向の変更は `alignSpec` を編集