所谓财务机器人,就是将传统人工处理财务工作的操作由计算机程序自动来完成。为此,一些可以提供键盘和鼠标模拟的工具都可以应用于此。pyautogui就是一个常见的Python库。下面介绍下基本的使用方法(以PyCharm和Excel为例):
1)首先可以看到Excel版本的记账凭证,界面如:
Excel文档下载:https://www.njcie.com/python/pbda-data/5/记账凭证.rar
这里有三个工作表,我们的工作就是要将每个工作表的借贷发生总额即C11单元格的数字以大写汉字金额的方式补充到B11的合计中。
2)为了能够实现上述工作的自动化,我们需要先对pyautogui了解下。
在PyCharm项目中导入pyautogui后,即可做如下测试:
import pyautogui
pyautogui.press('a')
运行后,你会发现在当前编辑器光标处会自动出现了一个a的字符,就像刚才你按下了a这个键一样。
注意两个问题:一是此时如果大写模式打开,会输入A;二是如果打开了中文输入法,也会显示似乎以a来输入汉字的界面:
3)接下来,我们来尝试操作Excel文档。代码为:
import pyautogui
import time
time.sleep(5)
pyautogui.click(800, 780)
运行后,可以快速打开Excel文档界面,你会发现大约五秒后(sleep的作用),C11单元格被点击了一下。这个过程其实就是click函数模拟的,而后面两个整数代表了点击的坐标,这个坐标就是在我电脑上Excel中C11单元格中的一个点。因此大家如果需要也定位到C11,就需要灵活根据自己电脑的屏幕来确定坐标。方法很简单,按下PrtSc键截取当前屏幕,然后在开始菜单中打开“画笔”(注意不是画图3D等),直接按下Ctrl+V粘贴,在按下Esc键确定。此时在图片上移动鼠标,会发现左下角有两个数字在变化,那就是坐标,此时即可选中位于C11单元格的一个点坐标即可。
有一种可能性,那就是屏幕相对较小,不能直接看到C11,还需要滚动鼠标才能看到。为了简化练习,可以考虑将当前Excel表格内容缩小显示,比如按下Excel表格右下角的滑钮缩小,或者折叠工具栏,使得C11直接显示在屏幕即可。
4)这些操作确认没有问题后,就可以继续完善代码了。
import pyautogui
import time
time.sleep(5)
pyautogui.click(800, 780)
pyautogui.hotkey('ctrl', 'c')
此时会点击后模拟复制操作,打开任何一款编辑器,粘贴内容都会发现已将金额复制成功
5)接下来就可以将复制的金额再转换为大写汉字金额:
import pyautogui
import pyperclip
import time
def daxie(number):
numchar = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
pr = ['圆', '拾', '佰', '仟', '萬']
lengh = len(str(number))
result = ''
for i in str(number):
lengh -= 1
result += ('%s%s' % (numchar[int(i)], pr[lengh]))
return result
time.sleep(5)
pyautogui.click(800, 780)
pyautogui.hotkey('ctrl', 'c')
print(daxie(int(float(pyperclip.paste().replace(',', '')))))
此时五秒钟结束后可以在PyCharm中发现输出:壹萬零仟零佰零拾零圆
该代码将刚才复制到剪贴板的内容,通过pyperclip模块的paste函数获取到,并再去除掉千分位符号后,转换为整数,交给daxie函数完成大写汉字金额的输出。
6)最后就可以将这个大写汉字金额直接追加到Excel表格中了,效果为:
代码为:
import pyautogui
import pyperclip
import time
def daxie(number):
numchar = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
pr = ['圆', '拾', '佰', '仟', '萬']
lengh = len(str(number))
result = ''
for i in str(number):
lengh -= 1
result += ('%s%s' % (numchar[int(i)], pr[lengh]))
return result
time.sleep(5)
pyautogui.click(800, 780)
pyautogui.hotkey('ctrl', 'c')
pyperclip.copy(daxie(int(float(pyperclip.paste().replace(',', '')))))
pyautogui.doubleClick(490, 780)
pyautogui.hotkey('ctrl', 'v')
7)进一步完善代码,更多模拟切换到下一工作表再循环处理的方法,可以实现完整应用:
import pyautogui
import pyperclip
import time
def daxie(number):
numchar = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
pr = ['圆', '拾', '佰', '仟', '萬']
lengh = len(str(number))
result = ''
for i in str(number):
lengh -= 1
result += ('%s%s' % (numchar[int(i)], pr[lengh]))
return result
time.sleep(5)
for i in range(3):
pyautogui.hotkey('ctrl', 'home') # 回到A1,确保整个记账页面显示出来
pyautogui.click(800, 780)
pyautogui.hotkey('ctrl', 'c')
pyperclip.copy(daxie(int(float(pyperclip.paste().replace(',', '')))))
pyautogui.doubleClick(490, 780)
pyautogui.hotkey('ctrl', 'v')
pyautogui.hotkey('ctrl', 'pagedown') # 跳转下一工作表