文本处理 本地计算 开箱即用 内置示例 不留痕迹

Markdown 表格生成器

生成:粘贴 Excel 或 CSV 里的数据(Tab、逗号分隔均可),自动生成带分隔行与对齐标记的 Markdown 表格,列宽按显示宽度补齐(中文算两格),单元格里的竖线转义成 `\|`、换行转成 `<br>`;解析:粘贴别人写的表格,还原成逐行数据。

写文档时把表格数据转成 Markdown 是高频需求:从 Excel、WPS 或 CSV 复制来的数据,手工补竖线与分隔行既费时又容易错位。这个工具按列宽补齐后生成可直接粘进 README 与文档站的表格,也支持把别人写的表格还原成逐行数据,方便再导入表格软件。

两点使用要点:Markdown 表格靠第二行的分隔行判定结构(竖线加 --- ),所以分隔行不能省,对齐方式也写在这一行(默认左对齐,两端加冒号分别表示左、右或居中);单元格里的竖线要转义、换行要写成 br 标签,否则表格会被撑破、渲染出错位。

使用步骤

  1. 生成表格:从 Excel 或 CSV 复制数据直接粘贴(Tab、逗号分隔均可)。
  2. 按需开启列宽补齐(便于源码阅读)或关闭(减少 diff 噪音)。
  3. 解析表格:粘贴 Markdown 表格还原成逐行数据,再导入表格软件。
  4. 粘进编辑器后预览,确认列数与对齐符合预期。

计算原理与示例

分隔行为什么必须有

Markdown 表格靠第二行的分隔行(`| --- | :--: |`)判定「这是表格」而不是普通段落,同时由它声明各列的对齐方式:`---` 默认左对齐,`:--` 左对齐、`--:` 右对齐、`:-:` 居中。少了这一行,多数渲染器会把它当普通文本,只显示一堆竖线。

列宽对齐做了什么

补齐列宽是纯装饰:按每列最长的单元格(中文、全角字符按 2 列宽计算)在右侧补空格,让源码在等宽字体里对齐,便于阅读与维护。它不影响渲染结果,所以如果你在意 diff 噪音,可以关掉填充选项,输出紧凑表格。

转义与还原的边界

单元格里的竖线必须写成 `\|`,否则会被当成列分隔符把一格切成两格;单元格里的换行在 Markdown 表格中不受支持,因此转成 `<br>` 标签由渲染器换行。解析模式会把这两者还原回去,所以「生成 → 解析」能拿回原始数据;但如果你在原文里本来就写了 `<br>`,解析时会还原成真正的换行,这是一个有损点。

代码示例

JavaScript 把对象数组转成 Markdown 表格

const toMdTable = (rows) => {
  if (!rows.length) return '';
  const head = Object.keys(rows[0]);
  const esc = (v) => String(v ?? '').replace(/\|/g, '\\|').replace(/\n/g, '<br>');
  const line = (cells) => '| ' + cells.join(' | ') + ' |';
  return [
    line(head),
    line(head.map(() => '---')),
    ...rows.map((r) => line(head.map((h) => esc(r[h])))),
  ].join('\n');
};

console.log(toMdTable([
  { 名称: '基础版', 价格: 0, 说明: '个人使用' },
  { 名称: '专业版', 价格: 99, 说明: '含批量导出' },
]));

Shell 从 CSV 转表格(简单场景)

# 第一行当表头,逗号转竖线(字段内无逗号时可用)
awk -F, 'NR==1{printf "| %s |\n|", $0; n=NF; for(i=0;i<n;i++) printf " --- |"; printf "\n"; next}
         {gsub(/,/," | "); printf "| %s |\n", $0}' data.csv

# 字段里含逗号时改用真正的 CSV 解析器(见本页 JavaScript 示例)

# 提示:生成后粘进编辑器预览一次,确认列数没串

常见问题

生成的表格在 GitHub 和 Typora 里能正常渲染吗?

可以。输出的是最通用的管道表格(pipe table)语法,只用到竖线、连字符和冒号,GitHub、GitLab、Typora、Obsidian、VS Code 预览都支持,不依赖任何扩展语法。

表格的第二行分隔线能不能省掉?

不能。分隔行是 Markdown 判定表格的唯一依据,没有它整段会被当作普通段落渲染。本工具默认必输出分隔行,如果你想手写紧凑版本,可以用「不填充」选项减少空格,但分隔行始终保留。

单元格内容里有竖线怎么办?

工具会自动把竖线转义成 `\|`,这样它就不会被误认为列分隔符。反过来,解析已有表格时也会把 `\|` 还原成竖线,所以「生成 → 解析」可以拿回原始内容。

表格单元格里能放换行吗?

Markdown 表格语法本身不支持单元格内换行。本工具的处理方式是把换行转成 `<br>` 标签,多数渲染器会把它显示成换行效果。解析模式会把 `<br>` 还原成换行符——如果你原文里本来就写了 `<br>`,这一步会变成真正的换行。

数据从哪里复制粘贴最省事?

从 Excel、Numbers、飞书表格或数据库客户端直接选中区域复制,粘贴进来是一行一条记录、字段间为 Tab 的文本,本工具按 Tab 切列;纯 CSV 文本则把分隔符切到逗号即可。首行是表头时保留「首行是表头」默认选项。

列宽对齐会不会把文件撑大很多?

每个单元格最多补到该列最长内容再加一个空格,通常每行多出十几到几十个字符。若你在意仓库体积或 diff 噪音,可把「补齐列宽」关掉,输出紧凑表格——渲染效果完全一样。

中文单元格的宽度是怎么算的?

按显示宽度计算:汉字、全角标点算 2 列,英文字母数字算 1 列,所以列对齐在等宽字体下才真的整齐。如果混用中英文,你就会看到英文字段后面补了更多空格,那是正确行为。

能不能直接解析别人写的表格?

可以。切到解析模式粘贴表格即可还原成逐行数据,工具会识别对齐标记、处理 `\|` 转义、并在行列数不齐时把缺的格子补成空串。若文本里没有合法的分隔行,会明确提示不是表格而不是硬猜。

延伸阅读

来自本站原创文章,讲清这个工具背后的算法与口径。