美文网首页
Python编制会计凭证

Python编制会计凭证

作者: 2033 | 来源:发表于2020-02-24 20:46 被阅读0次

    首先感谢猛犸象和剑齿虎前辈以及我的一位程序员同学。

    前一段时间参加了店了的ERP系统协调开始,我就一直在找合适的提高工作效率的方法。我是公司里的会计,日常工作就是敲会计凭证,这是一个重复度非常高的工作。慢慢的在网上发现了Python,很幸运的发现了一篇文章:就是猛犸象和剑齿虎前辈的python——实现ERP软件自动化操作 - 简书。又在我一位程序员同学和搜索引擎的帮助下慢慢完成了第一个Python脚本。

    基本思路是用Python语言读取excel文件,导入数据,再编写一个Python脚本操作键盘鼠标,代替人工把数据录入财务软件里,每天只需要制作好excel表格,运行脚本,就可以让电脑代替手工操作点点点输入输入输入,能节约很多时间,保住我们珍贵的三万天。理论上来说,平常使用ERP软件,用友,金蝶,各种系统软件的都是可以用这个方法的,但是具体适用程度不一样,对我来说,如果我们的收银可以及时准确的把数据录入到excel表格中,我每天跑跑脚本,就能搞定一部分凭证。原来十五张凭证要用两个小时,现在可能不到一个小时就可以结束。

    刚开始的时候我有一个笼统的想法:从公司的层面来考虑,最理想的状态,就是任何一笔业务中的任何一个数据只需要输入一次,就可以沿途生成各种所需要的成果,用于公司的分析和管理。这样需要做的会更多,要打通公司内使用的各个系统软件,各种excel表格,构成一个完整的体系。后面发现早都有类似的管理方案和软件开发了,有公司在这样做了。

    回归正题,这个脚本主要用到Python中的三个模块:

    1,pyautogui模块

    主要功能是:根据屏幕分辨率模拟鼠标移动,包括相对移动(鼠标在当前位置上下移动,左右移动),绝对移动(鼠标移动到固定位置)

    根据屏幕分辨率模拟鼠标点击,包括鼠标左击,右击,中击,单击,双击,鼠标拖拽。

    支持键盘按键和英文输入,包括单独按键和组合按键。

    在这个脚本里主要是用来操控键盘鼠标把固定的值输入财务软件里。

    2,pyperclip模块

    这个模块是为了解决pyautogui模块不支持中文输入补充的,pyperclip模块可以把指定文本复制到粘贴板上,再用pygutogui模块输入“Ctrl”,“V”把中文输入财务软件里。

    3,openpyxl模块

    可以读取和修改excel文件,在这里主要是excel的读取。

    下面按照一个脚本细写一下,这个脚本不是第一个脚本,是后来慢慢完善出来的改进版,更为使用,又用到erp,用友,金蝶的同学应该可以很方便拿去用。

    “#”字符在Python中是做代码注释的意思,这一行代码中“#”后面的部分不会被执行。

    # 首先,将四个模块倒入程序中而后可以用这三个模块的功能,time模块只用到了一个函数用于防止程序中间出错,不好终止的问题。

    import pyautogui

    import pyperclip

    import openpyxl

    import time

    # 接着读取execl的数据,这里运用到了Python中的赋值,将指定路径的excel文件命名为wb,也可以其他。”data_only=True参数表示仅仅载入excel的数据,不载入excel的函数。Python中区分字母大小写。

    wb = openpyxl.load_workbook('F:\工作\凭证模版.xlsx', data_only=True)  

    # 选择excel文件中的工作薄“sheet3”命名为“sheet”

    sheet = wb.get_sheet_by_name('Sheet3')

    # 读取excel中的最大行

    max_row = sheet.max_row

    # pyautogui.PAUSE函数在pyautogui中含义是每一步停留时间间隔,模块默认值是0.1秒,不过我用的财务软件反应不过来,因此延长了时间设置成了0.5秒。

    pyautogui.PAUSE = 0.5

    # 这是一个程序校验,具体我也不懂。可以参考底下的引用文档。

    pyautogui.FAILSAFE = True

    # 开始操作鼠标了,click财务软件的选项就可以了,click()函数里边的值是我电脑屏幕里的纵坐标和横坐标。

    pyautogui.click(270, 160)  # 增加凭证

    # for x in range(4, 6)循环表示把x分别赋值为整数4,5,6,依次代入程序中运行,第一次运行中所有用x的地方,x的值均为4。4跑完之后,程序按照5再循环一次,以此类推。循环是程序代替人工重复工作的关键,这里的x表示为excel表格中的行数,从第4行循环到第6行。

    for x in range(4, 6):  

        # 这里引入了变量i,并将变量i赋值为0,从而能在后面解决凭证录入界面逐行下移的问题

        i = 0

        # 这个是一个操作键盘按键的函数,只需要把按键名称输入其中就可以了。

        pyautogui.hotkey('Backspace')

        # 复制excel中的值到粘贴板上,value表示(x,1)单元格中的值,这一步是复制日期

        pyperclip.copy(sheet.cell(x, 1).value)  

        # 这一步是粘贴日期

        pyautogui.hotkey('ctrl', 'v')  

        # 鼠标点击第一行摘要区域

        pyautogui.click(316, 256)  

        # 复制摘要

        pyperclip.copy(sheet.cell(x, 2).value)  

        # 粘贴摘要

        pyautogui.hotkey('ctrl', 'v')  

        # 这里引入了excel表格的列循环,表格设计时excel列数表示科目对应的值。从格式上看,y的循环置于x的循环之下表示,每次x循环时,y都会循环一遍。

        for y in range(9, 36):  

            # while True和if..elif...else是两组条件判断循环,当下边出现break时,while True循环会被终止,否则会出现死循环。设计这个循环的目的是为了判断会计科目下是否存在值,存在值才需要输入到软件里,不存在值不需要输入到软件里。而在Python是区分0值和空值的,因此又加入None。str()的意思是将从excel中提取的值类型转化为字符串,从而能够判断是否等于字符串形式的0。

            while True:

                if str(sheet.cell(x, y).value) == '0':

                    break

                elif sheet.cell(x, y).value is None:

                    break

                else:  

                    # 这里表示y每循环一次且if判断有值,i会增加1.

                    i = i + 1  

                    # 点击科目栏。436是凭证界面科目栏的纵坐标,23是凭                  证界面每行的间距。这样鼠标就会依次移动到下一行了。

                    pyautogui.click(436, 256 + (i - 1) * 23)  

                    # 输入科目编码。因为科目编码是数字,可以用pyautogui中自带的函数输入软件中。

                    pyautogui.typewrite(str(sheet.cell(1, y).value))  

                    # 判断是否有辅助核算。有些会计科目有辅助核算,有些没有,所以写了一个判断函数。

                    if sheet.cell(x, y + 27).value is not None:  

                        # 点击辅助核算

                        pyautogui.click(pyautogui.moveRel(114, 0))

                         # 复制辅助核算

                        pyperclip.copy(sheet.cell(x, y + 27).value)

                        # 输入辅助核算

                        pyautogui.hotkey('ctrl', 'v')  

                        # 辅助核算确认

                        pyautogui.click(1140, 400)  

                    # 判断金额在借方还是贷方。会计科目中分借贷方,而这在财务软件中是不同的位置,所以需要判断一下。

                    if str(sheet.cell(2, y).value) == '借':  

                        # 点击借方金额

                        pyautogui.click(780, 256 + (i - 1) * 23)

                        # 输入借方金额

                        pyautogui.typewrite(str(sheet.cell(x, y).value))  

                    else:

                        # 点击贷方金额

                        pyautogui.click(900, 256 + (i - 1) * 23)  

                        # 输入贷方金额

                        pyautogui.typewrite(str(sheet.cell(x, y).value))  

                    # 判断是否有数量核算。部分科目有数量核算,会再次改变财务软件的输入形式,因此要用判断函数把这部分找出来,让它们按照另一条路线行驶。

                    if str(sheet.cell(1, y).value) == '600101':  

                        # 点击放大镜

                        pyautogui.click(950, 256 + (i - 1) * 23)  

                        # 输入数量

                        pyautogui.typewrite('1')  

                        pyautogui.doubleClick(1000, 430)

                        # 点击确认

                        pyautogui.click(910, 610)  

                    elif str(sheet.cell(1, y).value) == '140501':

                        # 点击放大镜

                        pyautogui.click(830, 256 + (i - 1) * 23)  

                        # 输入数量

                        pyautogui.typewrite('1')  

                        pyautogui.doubleClick(1000, 430)

                        # 点击确认

                        pyautogui.click(910, 610)  

                    elif str(sheet.cell(1, y).value) == '64010101':

                        # 点击放大镜

                        pyautogui.click(950, 256 + (i - 1) * 23)  

                        # 输入数量

                        pyautogui.typewrite('1')  

                        pyautogui.doubleClick(1000, 430)

                        # 点击确认

                        pyautogui.click(910, 610)  

                    break

        # 这是最后一步,也是最让人喜欢的一步,从格式上看它和y的遍历循 环并列,附属于x的遍历循环之下,也就意味着,x的遍历循环结束之后,该程序才会结束。

        pyautogui.click(460, 160)

        #程序暂停5秒,用于发生错误的时候终止程序运行。

        time.sleep(5)

    Python的功能很强大,比如批量操作excel、ppt和Word这些提高工作效率的事情,对平常的工作都很有帮助。

    参考文章:

    pyautogui自动化控制鼠标和键盘操作_Python_灵动的艺术的博客-CSDN博客

    https://blog.csdn.net/weixin_43430036/article/details/84650938

    openpyxl官方手册 - 简书

    https://www.jianshu.com/p/3f348b7552a7

    pyautogui (一)_Python_静心学习、耐心沉淀-CSDN博客

    https://blog.csdn.net/ibiao/article/details/77859997

    相关文章

      网友评论

          本文标题:Python编制会计凭证

          本文链接:https://www.haomeiwen.com/subject/lnwktttx.html