快速将PDF电子发票数据提取到发票明细登记表的方法
作者:ITFANS来源:部落窝教育发布时间:2024-08-31 17:13:03点击:1501
编按:
如果单位还没有采用电子发票系统,就无法直接导出发票明细,需要对收到的PDF电子发票人工录入发票明细表中。本教程提供一种快速将PDF电子发票数据提取到发票明细登记表中的方法。
财务人员会收到很多PDF格式的电子发票,今天为大家介绍如何使用Excel自动提取电子发票中的明细数据。
比如,需要将每张PDF发票红色框选区中的数据提取出来,按下方形式排列,方便登记到发票明细表。下面笔者以Excel 2021为例介绍具体的操作。
提取出以上明细数后,再加上发票号码、开票日期、发票类型、销方信息等,即可登记入发票明细表中。
一、导入PDF电子发票数据
把收到的PDF电子发票都保存在一个文件夹中备用。启动Excel后点击“数据/来自文件/从PDF文件”(旧版Excel需要选择“从文件夹”)。导入发票文件后选择“page001”,点击“转换数据”。
在加载界面点击“保留行的范围”,选择仅保留发票名称栏到合计栏界面的数据(具体行数可能不同发票有所不同),方便后续公式对数据的引用。
最后点击“关闭并上载/关闭并上载至”,在数据的放置位置选择“现有工作表的A1”。
二、提取明细数据
返回Excel中,可以看到发票数据有三个明显的问题:
问题1:大多项目名称(货物或应税劳务、服务名称)是多行的
一个项目名称应当记录在一个单元格中,但当前以“*”开头的项目名称记录在多个单元格中。
问题2:存在多余的列
各明细数据,如项目名称、规格型号、单位等各列之间不应有多余的空列。
问题3:数据错位
譬如当前D列是“规格型号”,但实际的规格型号数据“25208”登记在C列。
下面我们进行数据提取。
1.提取项目名称数据
名称数据统一以“*“开头,一个名称可能是一行数据,也可能是多行数据。
在B16输入公式:
=TEXTSPLIT(CONCAT(IF(LEFT(B3:B13,1)="*",CHAR(10)&B3:B13,B3:B13&"")),,CHAR(10),TRUE)
公式说明:
使用IF函数判断分行数据开头是否有“*”。如有,就在前面连接一个分行符(CHAR(10));如没有,就在其后连接一个空值(用于屏蔽多余值导致的“0”字符)。
再使用CONCAT将这两个类型数据连接起来,最后用TEXTSPLIT函数以分行符CHAR(10)分行得到正确的名称数据。
2.提取其他数据
特点:
存在多余的空列
数据存在错位
并非所有项目都有规格型号、单位、数量、单价数据
因此,最好的方式是整行提取项目名称后各列数据,然后去掉空值,再从右往左分别取数据赋给税额、税率、金额、单价等。
在C16输入公式:
=IFERROR(TAKE(DROP(DROP(UNIQUE(VSTACK(IF($C$3:$Z$3<>"",COLUMN($C$3:$Z$3),""),FILTER($C$3:$Z$13,LEFT($B$3:$B$13)="*")),1,1),1)&"",,(COLUMN(A1)-7)),,-1),"")
接着将公式向右拖到到I16,同时定位到需要转化为数字的列(如金额列),将公式中的“take”更改为“--take”,完成格式的转换。
三、实际使用
上方主要介绍了单张发票中明细数据的提取思路和方法。
但是每张发票的行数,以及项目名称所在列数可能都不一样,因此,在实际处理的时候可能需要经常按实际修改公式。
如果你不想修改公式,则需要设法查找出项目名称的开始位置和结束位置,然后在今天的公式中引用单元格的位置即可做成模板。
教程中其他数据的提取思路是正确的,但如果要想适应所有电子发票的提取,则还需要修改公式。譬如当前公式就不适合规格型号是多行的,或者单个产品有规格型号但没有单位的发票的处理。这些不足,都需要在模板中避免。
本文配套的练习课件请添加客服微信buluowojiaoyu索取。
做Excel高手,快速提升工作效率,部落窝教育Excel精品好课任你选择!
扫下方二维码关注公众号,可随时随地学习Excel:
相关推荐:
版权申明:
本文作者ITFANS;部落窝教育享有稿件专有使用权。若需转载请联系部落窝教育。