;制作销售单自动录入Excel表格
#Include <正则全局模式>
Home::
Send, ^a
Send, ^c
Ysj = % clipboard ;这是复制的原始数据
hs= ;用来确定录入了多少行
Danhao=
Riqi=
; name1=
; amt1=
; MsgBox % Ysj
;---------------获取单号与日期---------------------------
正则1=
(`%
m)(*ANYCRLF)(?<!\d)000\d{4}(?!\d)
)
正则2=
(`%
m)(*ANYCRLF)(?<!\d)\d{2,4}年\d{1,2}月\d{1,2}日(?!\d)
)
返回值:=GlobalRegExMatch(Ysj, 正则1, 起点:=1)
for k,v in 返回值
Danhao = % v.Value[0]
DayV:=GlobalRegExMatch(Ysj, 正则2, 起点:=1)
for k,v in DayV
Riqi = % v.Value[0]
;-------获取产品名称---转化产品名称为编号-----------
正则=
(`%
m)(*ANYCRLF)(?<=[·`]).{1,10}(?=[·`])
)
Sname=
;创建一个关联数组,用于替换编号方式
Nbian := {"绿":"LV", "普":"PU"
, "大":"DA", "铁":"TE", "单":"DN", "酒":"JU"}
; msgbox % Nbian.绿
for k,v in GlobalRegExMatch(Ysj, 正则, 起点:=1)
{
Index_01 = % A_index
name%A_index% = % v.Value[0]
for k2, v2 in Nbian
If InStr(v.Value[0], k2){
Sname := StrReplace(v.value[0], k2, v2)
; msgbox % Sname
name%Index_01% = % Sname
}
hs = % A_index
}
; msgbox % name1
;----------获取产品数量----------------------
正则=
(`%
m)(*ANYCRLF)(?<=s)\d[.\d]*
)
返回值:=GlobalRegExMatch(Ysj, 正则, 起点:=1)
for k,v in 返回值
{
amt%A_index%= % v.Value[0]
}
; msgbox % num2
;----------获取产品价格(总价)----------------------
正则=
(`%
m)(*ANYCRLF)(?<!\d)(?<!s)\d{1,4}\.\d{2}
)
返回值:=GlobalRegExMatch(Ysj, 正则, 起点:=1)
heji=
for k,v in 返回值
{
price%A_index%= % v.Value[0]
heji += price%A_index%
}
; msgbox % price2
;----------获取客户姓名----------------------
#Include customerinfo.ahk ;将客户姓名放在另一个文件里面
kehuG= ;将所有客户名字集合在一个字符串里面,用于判断
For k, v in KehuNamegroup
kehuG .= k . "=" . v . "`n"
;------接下来从原数据中获取姓名,跟kehuG进行比对筛选------
正则=
(`%
m)(*ANYCRLF)(?<=\[-)[一-龟]{2,4}
)
返回值:=GlobalRegExMatch(Ysj, 正则, 起点:=1)
for k,v in 返回值
{
kehu%A_index%= % v.Value[0]
If !(InStr(kehuG, v.Value[0]))
;如果源数据中的两三个字没有在数据库里面,那就删掉它
kehu%A_index%=
}
; ToolTip, 读取完成
; sleep 500
; ToolTip
heji2 = % Format("{:.2f}", heji) ;改为小数点后两位
tanchu= % "合计:" . heji2 . "元"
msgbox, , 总数, %tanchu%, 1
Return
;---------------输出端口----------------------
; ---------各个按键不同输出端口-----------------
Insert::
PostMessage, 0x0050, 0, 0x4090409,, A ;切换为英文输入法
Loop %hs%
{
SendInput % Riqi
Send, {tab}
;错误提示----输入法如果没有调整为英文,就很容易出错---
SendInput % name%A_index%
; msgbox % name%A_index%
; KeyWait, F1, D
Send, {tab}
SendInput % amt%A_index%
Send, {tab 2}
SendInput % Danhao
Send, {tab}
SendInput % price%A_index% / amt%A_index%
Send, {tab}
SendInput % price%A_index%
Send, {tab}
SendInput % kehu%A_index%
Send, {tab}
SendInput, 林新腾
Send, {enter}
}
sleep, 500
Send, #{Space}
Return
;---------附加几个快捷键---------------
#IfWinActive ahk_exe PandaOCR.exe
:*:fw::芙蓉王
:*:hz::合中
:*:cz::林长治
:*:1q::pu
~w & f::SendInput, `[-
:*:ls::零售客户
:*:ll::林立
:*:cs::茶试
:*:syd::宋衍东
#If
今天我给大家带来最近我的新作,自动录入我的手动销售单,我的销售单是长这样子的:
识别出来的数据长这样:
销售单№0004934单位:
5月27日4022年第页编号编码名 称单位数量单价金额备注1盘22盒1100.0发浩2姜13龙珠斤12230照陈哲第一联3440230硬01包10125.00朱孙磊4440230硬双喜包115.00(存根)5678第二联 (入账)9101112合计人民币(大写):
拾72壹佰柒拾司元②川②1¥470.-会计:
出纳:
字腾复核:
事正乐
接着制定自己的规则,我用“·”来标记产品名称,用“s”标记数量, 用‘[-’标记客户,再用f分割一下简单人工处理一下,就变成了:
销售单№0004934单位:
5月27日4022年第页编号编码名 称单位数量单价金额备注1`绿22`盒s1fff100.0fffw[-发浩ff2姜`pu139`龙珠斤1s2fff230.00照陈哲第一联3`440230`硬01包s10fffw125.00fffw[-林新展4`440230`硬双喜包s1fff15.00(存根)56w[-林新蔚78第二联 (入账)9101112合计人民币(大写):
接着上代码:
;类似于将阿墘进货单自动录入excel表格一样
;制作销售单自动录入Excel表格
#Include <正则全局模式>
Home::
Send, ^a
Send, ^c
Ysj = % clipboard ;这是复制的原始数据
hs= ;用来确定录入了多少行
Danhao=
Riqi=
; name1=
; amt1=
; MsgBox % Ysj
;---------------获取单号与日期---------------------------
正则1=
(`%
m)(*ANYCRLF)(?<!\d)000\d{4}(?!\d)
)
正则2=
(`%
m)(*ANYCRLF)(?<!\d)\d{2,4}年\d{1,2}月\d{1,2}日(?!\d)
)
返回值:=GlobalRegExMatch(Ysj, 正则1, 起点:=1)
for k,v in 返回值
Danhao = % v.Value[0]
DayV:=GlobalRegExMatch(Ysj, 正则2, 起点:=1)
for k,v in DayV
Riqi = % v.Value[0]
;-------获取产品名称---转化产品名称为编号-----------
正则=
(`%
m)(*ANYCRLF)(?<=[·`]).{1,10}(?=[·`])
)
Sname=
;创建一个关联数组,用于替换编号方式
Nbian := {"绿":"LV", "普":"PU"
, "大":"DA", "铁":"TE", "单":"DN", "酒":"JU"}
; msgbox % Nbian.绿
for k,v in GlobalRegExMatch(Ysj, 正则, 起点:=1)
{
Index_01 = % A_index
name%A_index% = % v.Value[0]
for k2, v2 in Nbian
If InStr(v.Value[0], k2){
Sname := StrReplace(v.value[0], k2, v2)
; msgbox % Sname
name%Index_01% = % Sname
}
hs = % A_index
}
; msgbox % name1
;----------获取产品数量----------------------
正则=
(`%
m)(*ANYCRLF)(?<=s)\d[.\d]*
)
返回值:=GlobalRegExMatch(Ysj, 正则, 起点:=1)
for k,v in 返回值
{
amt%A_index%= % v.Value[0]
}
; msgbox % num2
;----------获取产品价格(总价)----------------------
正则=
(`%
m)(*ANYCRLF)(?<!\d)(?<!s)\d{1,4}\.\d{2}
)
返回值:=GlobalRegExMatch(Ysj, 正则, 起点:=1)
heji=
for k,v in 返回值
{
price%A_index%= % v.Value[0]
heji += price%A_index%
}
; msgbox % price2
;----------获取客户姓名----------------------
#Include customerinfo.ahk
kehuG= ;将所有客户名字集合在一个字符串里面,用于判断
For k, v in KehuNamegroup
kehuG .= k . "=" . v . "`n"
;------接下来从原数据中获取姓名,跟kehuG进行比对筛选------
正则=
(`%
m)(*ANYCRLF)(?<=\[-)[一-龟]{2,4}
)
返回值:=GlobalRegExMatch(Ysj, 正则, 起点:=1)
for k,v in 返回值
{
kehu%A_index%= % v.Value[0]
If !(InStr(kehuG, v.Value[0]))
;如果源数据中的两三个字没有在数据库里面,那就删掉它
kehu%A_index%=
}
; ToolTip, 读取完成
; sleep 500
; ToolTip
heji2 = % Format("{:.2f}", heji) ;改为小数点后两位
tanchu= % "合计:" . heji2 . "元"
msgbox, , 总数, %tanchu%, 1
Return
;---------------输出端口----------------------
; ---------各个按键不同输出端口-----------------
Insert::
PostMessage, 0x0050, 0, 0x4090409,, A ;切换为英文输入法
Loop %hs%
{
SendInput % Riqi
Send, {tab}
;错误提示----输入法如果没有调整为英文,就很容易出错---
SendInput % name%A_index%
; msgbox % name%A_index%
; KeyWait, F1, D
Send, {tab}
SendInput % amt%A_index%
Send, {tab 2}
SendInput % Danhao
Send, {tab}
SendInput % price%A_index% / amt%A_index%
Send, {tab}
SendInput % price%A_index%
Send, {tab}
SendInput % kehu%A_index%
Send, {tab}
SendInput, 林新腾
Send, {enter}
}
sleep, 500
Send, #{Space}
Return
;---------附加几个快捷键---------------
#IfWinActive ahk_exe PandaOCR.exe
:*:fw::芙蓉王
:*:hz::合中
:*:cz::林长治
:*:1q::pu
~w & f::SendInput, `[-
:*:ls::零售客户
:*:ll::林立
:*:cs::茶试
:*:syd::宋衍东
#If
很不错的开发案例,还有很多优化的空间
?谢谢河大佬提点!可能还要等学多几个月,才能回来优化了哈哈!
学习,积分
学习,膜拜大佬
积分不够评论来凑!
什么ocr识别能力这么强
PandaOCR