供应商发票格式标准化:为什么格式差异已经不再是问题

采购部的同事形容每月的处理流程时说:"每家供应商的发票格式都不一样——有的发PDF,有的发Excel,还有的直接邮寄纸质发票。"另一个同学补充:"同一家供应商每个月格式都在变,同一张发票里还混着不同币种。"还有人直接发问:"数据一团乱是采购的常态,还是我哪里做错了?"几十年来,标准答案只有两个:要求供应商统一格式,或者给每家供应商建一个模板。两种方法都无法规模化。另一种思路——在提取时完成标准化,而不是在提交时——彻底改变了这道题的解法。

用AI提取将任意格式的供应商发票标准化为统一的Excel列

"让供应商用我们的格式"为什么从来行不通

每个运营团队最终都会试图通过强制标准解决格式混乱的问题。他们把模板发给供应商:"所有发票必须使用这个格式。"对于少数规范、配合的大客户,这招短期有效。然后例外就开始堆积。某家供应商的ERP只能按他们自己的格式导出。另一家供应商照做了三个月,然后系统升级后恢复原样。第三家——一个关键供应商,你没有筹码施压——对要求置之不理。六个月后,合规率是一个"差不多",表格还是一半手工录入,外加一个装着"不合规"PDF的文件夹等人处理例外情况。

格式强制的根本问题在于:它把标准化的负担压在了最没有动力配合的一方身上。你的供应商同时面对几十上百家客户,每家都有不同的格式要求。他们不会为你定制发票输出——他们的财务部门用自己ERP的方式开票。要求使用标准格式,就是要求供应商修改内部流程来配合你的录入工作流。这不是一个可以扩展的策略,它消耗的是双方关系中有限的善意。

更好的思路:承认供应商格式永远多样,在收到后而不是提交前完成标准化。这意味着使用能读取任意格式、输出你的标准的提取技术——无论原始文档长什么样,输出始终是相同的列、相同的日期格式、相同的数字格式、相同的供应商名称规范。

格式差异的四个维度

供应商发票的格式差异体现在四个维度上,任何标准化方案都必须同时处理这四个维度,才能产生真正一致的输出:

维度典型示例为什么让手工录入和模板OCR失效
字段位置发票号在右上角(供应商A)vs 左上角(供应商B)vs 表格底部表头(供应商C)模板OCR靠像素坐标映射——位置一变就要重建模板;手工录入需要逐字段视觉扫描。
字段标签"发票号" vs "Invoice No." vs "单据编号" vs 无标签仅有数值模板OCR匹配精确标签文本;手工录入需要判断:"这几串文字里哪个是发票号?"
值的格式日期:2026-02-10 vs 2026年2月10日 vs 10/02/2026;金额:¥1,234.56 vs 1234.56元模板OCR提取原始文本——后续还需解析;手工录入需对每个字段做格式判断。
供应商名称"广州恒通物流" vs "广州恒通物流有限公司" vs "恒通物流(广州)" vs "广州恒通"——同一家公司,四种写法任何模板都无法将这些归一化为同一供应商名称;VLOOKUP失效;数据透视表出现重复供应商行。

基于模板的提取工具能处理第一个维度(字段位置),偶尔能处理第二个维度(字段标签)——但在第三个维度(值的格式)和第四个维度(供应商名称)上失效,因为这两个维度需要语义理解,而不是位置映射。一个成功定位到发票日期坐标的模板,仍然会把"2026-02-10"和"2026年2月10日"和"10/02/2026"作为三个不同的文本字符串提取出来,留给你在Excel里手动归一化。

在提取时完成标准化,而不是事后处理

使用自定义列名提取方式,标准化发生在提取过程中——不是单独的后处理步骤。机制很简单:你的列名包含格式指令,AI在提取每个值时遵循这些指令。这同时解决了上述四个维度:

维度一——字段位置:AI通过理解发票号的含义(一个字母数字组合的参考编码,通常标记为"发票号"或类似内容)来定位它,而不是通过它在页面上的位置。这在任何布局下都有效,不需要为每个供应商建模板。

维度二——字段标签:语义匹配处理标签变体。"发票号"、"Invoice No."、"单据编号"以及无标签的参考编码,全部映射到你的"发票号"列。AI理解这些是等价的字段含义,而不是相同的文本字符串。你不需要维护同义词表,语言模型负责处理映射。

维度三——值的格式:你的列名指定输出格式。"开票日期(YYYY-MM-DD)"告诉AI提取日期并转换为ISO格式,无论文档中如何呈现。"含税总额(数字,保留2位小数)"剥离货币符号、正确解释千位/小数分隔符,输出干净的数值。国内供应商用"2026年2月10日",海外供应商用"10/02/2026",提取后都是同样的日期格式——因为AI在提取时就按你的格式指令完成了转换。

维度四——供应商名称:AI能识别"广州恒通物流"、"广州恒通物流有限公司"和"恒通物流(广州)"指向同一实体,并可以归一化为一个首选名称。对于供应商名称一致性要求高的场景(比如审计追踪),可以结合参考文件——用供应商主数据表让AI将提取的名称匹配到规范的供应商记录上。

实际效果:上传50张发票,来自30个不同供应商,每家格式各异。输出的表格有统一的列、统一的日期格式、统一的数字格式、规范化的供应商名称。你不需要单独跑一步"数据清洗",不需要写Excel公式解析日期,也不需要在数据透视表里手动合并"恒通物流"和"广州恒通物流有限公司"的行。标准化是提取的副产品,不是下游任务。

混合输入问题:PDF + 截图 + 纸质发票

格式差异不只体现在版面布局上,还体现在文件类型上。采购经理描述的情形是:"有的供应商发PDF,有的发Excel表格,还有的直接邮寄纸质发票。"大多数标准化工具只能处理一种输入类型。模板OCR针对PDF;表格规范化工具针对Excel文件;两者都无法兼顾。

自定义列名提取与输入类型无关,因为AI读取的是文档的视觉内容,而不是其容器格式。一张PDF、一张纸质发票的手机照片、一张Excel截图——AI用相同的方式处理视觉信息。这意味着你可以在混合批次中完成标准化:供应商A的ERP导出PDF、供应商B的邮件截图、供应商C的扫描纸质发票,全部进入同一个提取流程,产生同样标准化的输出。

列名中的格式指令("开票日期(YYYY-MM-DD)")在所有输入类型上均匀生效。你不需要为PDF提取的文本和Excel单元格值分别写日期解析规则。AI处理的是视觉表示,而不是底层文件结构,所以两者都能处理。

常见问题

如果供应商发来外文发票——比如日文或英文——能处理吗?

可以。AI按字段含义提取,而非按标签文本匹配,因此支持多语言发票。日语的"請求書番号"、英语的"Invoice Number"、法语的"Numéro de facture"都映射到你的"发票号"列。日期和数字格式根据文档本地化设置处理,AI在提取时按你指定的输出格式转换。你不需要读懂供应商的语言才能处理他们的发票。

发票上有两个不同含义的"日期"字段(开票日期 vs 到期日),AI怎么区分?

这正是列名要具体的原因。如果你的列名是"日期",AI需要猜测你想要哪个日期。如果列名是"开票日期(YYYY-MM-DD)",AI就知道要找单据的开具日期。如果你同时设置了"到期日"列,AI通过语义角色来区分两者——开票日期通常出现在发票号和销售方信息附近,到期日通常出现在付款条款和含税总额附近。列名越具体,AI需要消解的歧义就越少。

AI能把供应商名称匹配到供应商主数据吗?

在一定程度上可以。AI的语义匹配已经能处理常见变体(有限公司 vs 有限责任公司,简称 vs 全称)。如果需要精确匹配ERP或财务系统中的供应商主数据,可以在提取时附带一份参考文件。例如,若你的用友系统中使用"广州恒通物流有限公司"作为规范名称,AI可以将提取到的"广州恒通物流"或"恒通物流(广州)"映射到该规范名称。但这种匹配是概率性的,而不是基于规则的——如果供应商名称与主数据条目差异过大(如发生更名或收购),可能无法匹配。对于审计敏感的场景,建议核查输出结果并人工处理未匹配项。

这和用Excel Power Query做提取后的数据清洗相比如何?

Power Query擅长提取后的数据转换——拆分列、转换日期格式、合并表格。但它要求数据已经是结构化格式。如果发票以PDF形式到达,Power Query读不了。两种方法是互补的:自定义列名提取负责从非结构化文档中获取结构化数据;Power Query进一步转换这些结构化数据。很多团队两者并用——用AI提取,再把XLSX载入Power Query做进一步筛选、计算列或财务系统专用格式处理。提取步骤处理Power Query做不到的事(读PDF);Power Query处理提取步骤不需要做的事(复杂业务逻辑转换)。

延伸阅读

试试你的供应商发票

上传来自不同供应商的几张发票,定义你需要的列名,看看输出是否已经完成标准化,不需要任何额外清洗。

免费开始使用