背景
近期有个从事会计的朋友咨询我,会不会uibot软件。 uibot没听过,当前也不会用了,就顺便聊了几句。大概描述下需求,就是公司很多发票,基本上都是先拍照,然后在人工统计发票信息。但是工作量太大了。 所以想通过uibot这样的智能自动化工具统计。
本着乐于助人和学习的态度,研究了一下。
从两个功能来练手,一个是增值税发票统计自动化,一个是火车票统计自动化。
现将基本的配置和代码整理出来,仅供参考。
实现
-
增值税发票统计自动化
开始之前,先介绍下整个流程。 首先是获取发票所在目录中的所有发票,然后遍历一下发票,提取发票信息,写入excel。
- 下载uibot软件,安装、注册。
- 网上下载一些增值税发票素材。
- 运行uibot软件
-
打开发票目录,获取发票文件
左侧命令中心->文件处理->通用文件, 找到"获取文件或文件夹列表",并拖动到中间可视化工作区。
- 在右侧属性和变量部分, 路径一项中,选择发票路径的最终目录。 输出到设置为"发票列表",此数组后续会调用。
- 命令中心->软件自动化->Excel, "打开Excel工作簿",拖动到中间可视化工作区。 在属性和变量部分,选中要保存发票信息的Excel文件。
- 遍历第2步设置好的数组"发票列表",以便于逐一识别发票信息。 基本命令->语法词法,按图示,拖动到可视化工作区。 其中,数组设置为"发票列表", 值设置为 "发票路径"。 点击"源代码",增加如下一行,测试效果。
-
5. 点击"Mage AI"->"通用多票据识别":
图像来源:输入第4步设置的值,即"发票路径",即调用每一张发票。
选择票的类型和提取自段,如图示:
6. 设置提取字段输出。 每个提取的字段我们可以自定义输出变量,该变量对应到用来保存信息的Excel列名。如图示
设置完毕:
7. 看看源代码, 红框中的代码为刚才配置的部分代码。但是财务同学不只有增值税专用发票,增值税电子发票。所以我复制一段上面的代码到下面,把"special" 改为"electronic" 即可。
8. 接下来就是要写入到Excel了。 命令中心->软件自动化->写入行,拖动到可视化工作区。
9. 我们看看保存发票信息的Excel的信息。
写的话,肯定是从第2行写,让程序自动识别当前行数。所以我们需要在"写入行"之前,插入一个步骤,即获取当前行数。
10. 获取Excel当前行数,从当前行的下一行开始写。
软件自动化->Excel,将"获取行数"拖动到"写入行"这一操作的前面,工作表默认为"Sheet1",如果你的工作表不是默认值,请修改为时间的工作表名称。 "输出到"保持默iRet变量即可。
打开源代码,按照图示,增加一行,让变量自+1(即下一行)
11. 写入设置: 第10步,iRet已经自+1,对应到下一行,所以我们直接写入iRet这一行就可以了。"立即保存"该项自主设置。
运行软件,展现效果:
因为网上下载的发票素材不清晰,发票代码和发票号码不能识别。 使用清晰的真实发票图片是可以顺利识别的。
发票信息统计自动化整体代码:
Dim iRet = ""
Dim 校验码 = ""
Dim objExcelWorkBook = ""
Dim arrayRet = ""
发票列表 = File.DirFileOrFolder('''C:\Users\Administrator.BJ937-9371\Desktop\fapiao''',"file",{"hasPath":True})
objExcelWorkBook = Excel.OpenExcel('''C:\Users\Administrator.BJ937-9371\Desktop\发票信息统计.xlsx''',True,"Excel","","")
For Each 发票路径 In 发票列表
Log.Info(发票路径)
With Each Mage.ImageOCRInvoice(发票路径,{"Pubkey":"Eto6bgJvXg2S5nDg5HnW","Secret":"TqS9K3xGiY5sYzWQuaXy9x5wpr7H","Url":"https://mage.uibot.com.cn"},30000)
Select Case .ExtractInvoiceType()
Case Alias("vat_special_invoice","增值税专用发票")
发票种类 = .ExtractInvoiceInfo("vat_special_invoice","type")
发票代码 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_daima")
发票号码 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_haoma")
开票日期 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_issue_date")
校验码 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_correct_code")
购方税号 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_rate_payer_id")
购方名称 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_payer_name")
金额 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_price")
税率 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_tax_rate")
税额 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_tax")
价税合计 = .ExtractInvoiceInfo("vat_special_invoice","vat_invoice_total_cover_tax_digits")
Case Alias("vat_electronic_invoice","增值税电子普通发票")
发票种类 = .ExtractInvoiceInfo("vat_electronic_invoice","type")
发票代码 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_daima")
发票号码 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_haoma")
开票日期 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_issue_date")
校验码 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_correct_code")
购方税号 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_rate_payer_id")
购方名称 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_payer_name")
金额 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_price")
税率 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_tax_rate")
税额 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_tax")
价税合计 = .ExtractInvoiceInfo("vat_electronic_invoice","vat_invoice_total_cover_tax_digits")
Case Else
End Select
End With
iRet = Excel.GetRowsCount(objExcelWorkBook,"Sheet1")
iRet = iRet + 1
Excel.WriteRow(objExcelWorkBook,"Sheet1","A"&iRet,[发票种类,发票代码,发票号码,开票日期,校验码,购方税号,购方名称,金额,税率,税额,价税合计],False)
Next
- 火车票统计自动化
操作过程基本一样,只是提取字段不同。
- 可视化部分:
- 代码截图:
- 输出效果
Dim iRet = ""
Dim objExcelWorkBook = ""
Dim arrayRet = ""
车票列表 = File.DirFileOrFolder('''C:\Users\Administrator.BJ937-9371\Desktop\chepiao''',"file",{"hasPath":True})
objExcelWorkBook = Excel.OpenExcel('''C:\Users\Administrator.BJ937-9371\Desktop\车票信息统计.xlsx''',True,"Excel","","")
For Each 车票路径 In 车票列表
Log.Info(车票路径)
With Each Mage.ImageOCRInvoice(车票路径,{"Pubkey":"Eto6bgJvXg2S5nDg5HnW","Secret":"TqS9K3xGiY5sYzWQuaXy9x5wpr7H","Url":"https://mage.uibot.com.cn"},30000)
Select Case .ExtractInvoiceType()
Case Alias("train_ticket","火车票")
车票号码 = .ExtractInvoiceInfo("train_ticket","ticket_number")
乘车日期 = .ExtractInvoiceInfo("train_ticket","departure_date")
出发地 = .ExtractInvoiceInfo("train_ticket","departure_station")
目的地 = .ExtractInvoiceInfo("train_ticket","arrival_station")
车次 = .ExtractInvoiceInfo("train_ticket","train_number")
座位类别 = .ExtractInvoiceInfo("train_ticket","class")
身份证 = .ExtractInvoiceInfo("train_ticket","passenger_id")
金额 = .ExtractInvoiceInfo("train_ticket","price")
Case Else
End Select
End With
iRet = Excel.GetRowsCount(objExcelWorkBook,"Sheet1")
iRet = iRet + 1
Excel.WriteRow(objExcelWorkBook,"Sheet1","A"&iRet,[车票号码,乘车日期,出发站,目的站,车次,座位类别,身份证,金额],False)
Next