请教,如何将网页上的表格,高效地转成 org-mode 格式?

如题。

比如说,我现在想将 跨境电商综合税说明 里的表格转换成 org-mode 格式。

不知道有什么快速的方法呢?

粘贴到类似 Typora 等应用里面,然后 pandoc md → org?

copy paste - Org mode - Parsing rich HTML directly when pasting? - Emacs Stack Exchange

选中网页表格复制,粘贴到 Emacs 中,然后有两种方法:

  1. org-mode 下选中表格,然后 C-c |
  2. 选中表格,然后 M-x table-capture ,输入表格分隔符、宽度等参数,可以转换为 table.el 的表格,在 org-mode 下,光标移动至转换后的表格中用 C-~table.el 的表格转换为 org-mode 的表格,最后 C-c C-c 格式化。

应该没办法吧,很多人做表的时候喜欢大量使用合并单元格,好像不这样表就不好看,我是尽量少使用合并单元格,我看你这张表里也有,但 org-mode不能合并单元格

谢谢,我试一下

我实验出一个解决方法:

首先,定位问题,「跨境电商综合税说明」里的税率表格,复制到 org-mode 里,最大的问题,所有数据都变成一列文本。这导致无法直接用 C-c | 直接切换成 org-mode 里的表格。

然后我参考了一个视频 Org-mode - copy paste tables - YouTube

按照视频里的演示,我发现,只要网页上的表格内容, 复制到 org-mode 时,可以呈现这样的样式,就可以按下 C-c | 来自动转换成 org-mode 的表格格式。

由于,我找到一个 Chrome 插件叫 Table Capture 。它能够自动识别网页上的表格,在复制内容时,直接能整理成 Excel 的格式。

然后,然后我将 Table Capture 复制的表格内容,复制到 org-mode 文件里,按下 C-c | 顺利地将内容整理成 org-mode 里的 table 格式。然后稍微整理了一下,效果如下图。

表格内文字不对齐,主要是因为我没用等宽等高字体。另外,加载 valign-mode 来整理似乎也不成功。但这是与本帖无关的另外的一个话题了。

【更新】后来启用了 cnfonts,解决了表格不对齐的问题。

目测 js 解析一下 table 内容就可以。

只是不太确定在 org 里 像食品,化妆品,这些大类要怎么处理

哦,超出了我的技能点,非程序员。还是感谢你的建议。

写了一小段代码, 在浏览器的 console 里执行,复制出来粘贴在 emacs 中就可以,只针对这个表格。另外,也没有处理表头, 因为这个页面的 table header 其实有错误,但是又在 HTML 的容错范围之内,就没有花力气去适配。

var { result } = Array.from(document.querySelector("table").querySelectorAll("tbody > tr")).slice(2).reduce((a, c) => {
  const row = Array.from(c.querySelectorAll("td")).map(i => i.querySelector("p > span").textContent.trim());
  const firstTd = c.children[0];
  const rowspan = +firstTd.getAttribute("rowspan") - 1;

  if (rowspan > 0) {
    a.result += "|" + row.join("|") + "|\n";
    a.spanText = firstTd.textContent.trim() + "|";
    a.spanCounter = rowspan;
  } else if (a.spanCounter) {
    a.result += "|" + a.spanText + row.join("|") + "|\n";
    a.spanCounter -= 1;
  } else {
    a.result += "|" + row.join("|") + "|\n";
  }

  return a;
}, {spanText: "", spanCounter: 0, result: ""});

console.log(result);

2 个赞

给你点赞,谢谢

2023年回答,用chatgpt和claude这类工具可以直接要求它生成org-mode格式的表格

1 个赞