PDF 转 Excel:表格提取的实际原理

您能在 PDF 里看到表格:行、列、表头,底部还有合计。转换器理应把它直接搬进电子表格,这似乎是理所当然的。问题在于,PDF 里并没有表格。它包含的是一些指令:在某些位置绘制字符,在另一些位置绘制线条,而您看到的网格,是您的眼睛拼凑出来的。每个 PDF 转 Excel 转换器都必须从这些零散的碎片中重建表格,这就是为什么结果从完美到完全不能用都有。本指南将解释这种重建是如何进行的、在哪里会失败,以及无论哪种情况,如何把干净的数字导入 Excel。

PDF 表格里究竟有什么

以发票中有三列的一行为例:“咨询费”、“2026年3月12日”和“1,250.00”。在 PDF 内部,这是一组各自独立的文字片段,每个片段都有一个 x 坐标和一个 y 坐标。这些片段不一定与词语相对应:有的程序把“1,250.00”写成一整块,有的写成“1,2”和“50.00”两块,还有的把每个字符单独放置。它们也不一定按阅读顺序出现。有些程序甚至一次绘制表格的一整列。

网格的线条是单独的绘图指令,与文字毫无关联。一条粗线可能由许多短线段画成,一行底纹可能只是一个填充的矩形而根本没有线条,很多表格更是完全没有线条。文件中没有任何地方会说明“这是一个单元格”、“这两个单元格是合并的”或“这一行属于表格”。

转换器查找表格的两种方法

表格提取工具通常使用两种方法之一。Tabula 和 Camelot 等开源工具把它们称为“lattice”(网格法)和“stream”(流式法)。

  • 沿着表格线(lattice)。转换器收集所有水平线和垂直线,算出它们的交点,并把每个封闭区域当作一个单元格。然后,它把每一段文字放进其所在的单元格。这种方法对网格完整的表格非常有效。但如果没有线条、线条断成了不完全相接的碎段,或者用底纹代替了边框,它就会失败。
  • 沿着空白(stream)。转换器按文字在页面上的高度把文字分成行,再寻找贯穿各行的、一致的竖向空隙,并把它们当作列的边界。这种方法能处理无边框的表格,比如许多财务报表。但如果列与列靠得很近、某一列是居中而不是对齐的,或者某一行中一个很长的值跨过了在其他所有行中分隔两列的空隙,它就会遇到困难。

这两种方法都是启发式的。它们在干净、规整的表格上很可靠,在其他所有情况下都不可靠,这就是为什么没有任何转换器能把每个表格都处理对。

表格提取在哪里出错

即使正确找到了列,有些问题还是会反复出现:

  • 换行的单元格。一段换到第二行的描述,看起来就像只填了一列的新行。
  • 合并及跨列的标题。一个横跨两列的标题,必须被分给其中一列,或者哪一列都不给。
  • 分页。延续到下一页的表格会重复表头,而且一行可能会被分页截成两半。
  • 以文本形式进来的数字。货币符号、千位分隔符、用括号表示的负数以及附在数字上的脚注标记,都可能让 Excel 无法识别数字。像“1.250,00”这样使用小数逗号的数字,只有在您的 Excel 使用相同约定时才能被正确读取。
  • 有歧义的日期。03/04/2026 在一些国家是 4 月 3 日,在另一些国家则是 3 月 4 日,Excel 会根据您的设置选择其中一种。
  • 没有文字映射的字体。有些 PDF 嵌入的字体缺少把每个字形映射回字符的对照表。它们显示得完全正常,但复制或提取其中的文字时,得到的却是一堆乱码。
  • 扫描件。扫描的页面上根本没有文字,只有文字的图片,所以不先进行 OCR,就没有任何东西可以提取。

我们的 PDF 转 Excel 工具做什么

我们的 PDF 转 Excel 转换器在您的浏览器中运行,所以文件不会被上传。它会为 PDF 的每一页单独建立一个工作表,分别命名为“第 1 页”、“第 2 页”,依此类推。它从上到下把页面上的每一行文字写入 A 列,每行文字占一行,并把每张图片放在它在页面上被绘制的位置。

它不会尝试猜测列在哪里。这样就能按阅读顺序保留每一行,不会因为猜错而丢掉内容或把内容放进错误的列。但这也意味着表格的一行会作为一个单元格进来,其中的各个值用单个空格隔开,需要您自己把它拆分成列。如果 PDF 是一次一列地绘制表格的,那么一行中的各个值可能会出现在相邻的几个单元格中。

它不进行 OCR,所以扫描的页面会作为图片而不是文字带过来。需要密码才能打开的 PDF,必须先解锁。

在 Excel 中把一列拆分成真正的多列

Excel 有很好用的工具来完成后半部分工作:

  • 分列位于“数据”选项卡上,可以按分隔符拆分一列。选择“分隔符号”,然后选择“空格”。当值本身不含空格时,这种方法效果很好,而数字和代码组成的表格通常正是如此。在最后一步的“高级”中,您可以设置小数分隔符和千位分隔符,从而修正“1.250,00”这类数字。
  • 快速填充(Ctrl+E)会从示例中学习。在下一列中输入您想从第一行得到的值,按 Ctrl+E,Excel 就会按照相同的模式填充其余部分。
  • 公式,适用于 Microsoft 365 版 Excel。=TEXTSPLIT(A2," ") 会把一行文字分散到多列中,=TEXTAFTER(A2," ",-1) 会返回最后一个空格之后的所有内容,通常就是一行末尾的金额。再用 VALUE() 包起来,就能把它变成数字。

Windows 上的 Microsoft 365 版 Excel 还可以直接导入 PDF:依次选择“数据”、“获取数据”、“从文件”、“从 PDF”。它会自己查找表格,对于边框清晰的表格值得一试。

其他值得一试的途径

从 PDF 中取出表格最可靠的方法,就是根本不从 PDF 里取。这些数字最初来自电子表格、财务系统或数据库,制作 PDF 的人通常可以把同样的数据导出为电子表格或 CSV 文件。例如,许多银行除了 PDF 之外,也允许您以 CSV 格式下载对账单。

对于网格线完整的表格,PDF 转 Word 值得一试。当表格以真正的 Word 表格形式转出来时,您可以把它复制到 Excel 中,单元格依然是单元格。对于扫描的表格,也应该走这条路,因为 PDF 转 Word 会对扫描页面进行 OCR。

使用之前先检查结果

提取错误是悄无声息的。一个放错列的值,看起来和放对列的值一样有效。在依赖提取出来的数据之前:

  • 用 SUM 对一列求和,并与 PDF 中印出的合计进行比较。如果一致,这些数字几乎可以肯定都正确转过来了。这是最好的一项检查。
  • 把行数与 PDF 对照,并仔细查看每一页的第一行和最后一行,因为分页处最容易出问题。
  • 留意以文本形式存储的数字。默认情况下,Excel 会把它们靠单元格左侧对齐,并用一个绿色小三角标记出来。
  • 手动核对几个日期,尤其是日数小于或等于 12 的日期。

总结

PDF 表格是一张表格的图像,由看起来连在一起的文字和线条组成。转换器根据表格线或空白来重建它,而这两种方法遇到不规则的版式都会失败。明白了这一点,您就能选择正确的途径:能拿到源数据时就索取源数据;拿不到时,就提取文字行并在 Excel 中拆分;而且在这些数字用于任何重要场合之前,一定要核对合计。

需要把 PDF 的文字放进电子表格吗?试试 PDF 转 Excel。

← 返回博客