美文网首页
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