一般的贸易或者货运型公司,经常需要做发票,有时候我们会遇到需要做大批量重复性的发票时,如果人工一个个去做,即耗时而且容易出错,这时我们可以用的python和excel相关的模块去批量生成。

现在有这样一个场景,有个excel的货运发票模板invoice GIL.xls,然后需要做多个发票名称不一样,收货人不一样的多个发票。这时我们可以定义新的发票名称为 invoice_no+GIL.xls(invoice_no为变量);发票内部需要更新 invoice_no、name两个变量

所以我们可以定义两个函数,一个是获取invoice_no、name的函数 get_excel_data(packing_file),通过excel文件packing_file获取。很简单的,就是通过xlrd模块获取 invoice_no、name放置在一个二维列表中(我们也可以其他方式获取)

# 获取发票需要的动态参数:第3行第2列发票号invoice,第3行第8列姓名name
def get_excel_data(packing_file):data = xlrd.open_workbook(packing_file)table = data.sheets()[0]nrows = table.nrowsnum = 0data = []for i in range(2, nrows):row = []invoice_no = table.cell_value(i, 1)name = table.cell_value(i, 7)if invoice_no !='':num = num +1row.append(invoice_no)row.append(name)data.append(row)print('总发票数量:',num)return data

另外需要一个函数 去更新发票模板中对应位置的nvoice_no、name

def make_excel(invoice_no,name):width = 256 * 8  # 8个字符宽# 字体和格式font = xlwt.Font()font.height = 240  # 12号字体font.bold = Truefont.name = 'Times New Roman'style = xlwt.XFStyle()style.font = fontinvoice = 'F:\pythonFile\\' + invoice_no + ' ' + invoice_namedata = xlrd.open_workbook(sample_file,formatting_info=True)new_excel = copy(data)ws = new_excel.get_sheet(0)      # 获取第一个sheetfirst_col = ws.col(0)            # 第一列first_col.width=width            # 第一列宽ws.write(7, 1, name,style)             # B8(7,1)ws.write(8, 5, invoice_no,style)       # F9(8,5)new_excel.save(invoice)

这里用到了xlutils模块,复制一份发票模板的数据,注意下面的一个参数,表示全部复制模板的信息(包括样式)

formatting_info=True 

此外有width、font、height、bold、style等等关于excel字体,单元格信息等配置

最后做发票就可以了

def mk_invoices():packing_file = 'F:\pythonFile\\packing.xlsx'data = get_excel_data(packing_file)      # 获取所需参数for info in data:invoice_no = info[0]name = info[1]print(invoice_no,name)make_excel(invoice_no, name)

大多数时候发票里面的内容非常复杂,各种格式都有,执行会报错

这个时候需要对UnicodeUtils.py 进行修改一下就可以了,其中黄色部分是旧的

完整代码:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:pymysqlModel.py
#日期:2018-10-22
#备注:pip install pymysql  pymysql是Python中操作MySQL的模块   F:\python_env\PaChong_env
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''import xlrd
import xlwt
from xlutils.copy import copysample_file = 'F:\pythonFile\\invoice GIL.xls'
invoice_name = 'GIL.xls'# 发票模板:需要修改的地方(动态)
def invoice():data = xlrd.open_workbook(sample_file)table = data.sheets()[0]a = table.cell_value(7, 1)b = table.cell_value(8, 5)print(a,b)# 获取发票需要的动态参数:第3行第2列发票号invoice,第3行第8列姓名name
def get_excel_data(packing_file):data = xlrd.open_workbook(packing_file)table = data.sheets()[0]nrows = table.nrowsnum = 0data = []for i in range(2, nrows):row = []invoice_no = table.cell_value(i, 1)name = table.cell_value(i, 7)if invoice_no !='':num = num +1row.append(invoice_no)row.append(name)data.append(row)print('总发票数量:',num)return data# TypeError: descriptor 'decode' requires a 'bytes' object but received a 'NoneType'
# F:\python_env\PaChong_env\lib\site-packages\\xlwt\UnicodeUtils.py
def make_excel(invoice_no,name):width = 256 * 8  # 8个字符宽# 字体和格式font = xlwt.Font()font.height = 240  # 12号字体font.bold = Truefont.name = 'Times New Roman'style = xlwt.XFStyle()style.font = fontinvoice = 'F:\pythonFile\\' + invoice_no + ' ' + invoice_namedata = xlrd.open_workbook(sample_file,formatting_info=True)new_excel = copy(data)ws = new_excel.get_sheet(0)      # 获取第一个sheetfirst_col = ws.col(0)            # 第一列first_col.width=width            # 第一列宽ws.write(7, 1, name,style)             # B8(7,1)ws.write(8, 5, invoice_no,style)       # F9(8,5)new_excel.save(invoice)def mk_invoices():packing_file = 'F:\pythonFile\\packing.xlsx'data = get_excel_data(packing_file)      # 获取所需参数for info in data:invoice_no = info[0]name = info[1]print(invoice_no,name)make_excel(invoice_no, name)if __name__ == '__main__':mk_invoices()

【Python实战】使用python批量生成发票相关推荐

  1. 【收藏】Python利用Excel+模板批量生成word文件

    Python利用Excel+模板批量生成word文件 最近帮朋友批量生成小区业主物业费未缴的律师函.朋友那有物业那边的表格数据,包括楼栋-房间号.业主姓名.欠费日期.欠款金额等信息.目的是需要将这些表 ...

  2. Python实战技术 - Python虚拟隔离环境 和 Docker技术

    Python实战技术 - Python虚拟隔离环境 和 Docker技术 已经学过,只想查查手册?--试试直接跳转到命令: (1)使用venv创建相关命令 (2)使用virtualenv创建相关命令 ...

  3. python实战|python爬取58同城租房数据并以Excel文件格式保存到本地

    python实战|python爬取58同城租房数据并以Excel文件格式保存到本地 一.分析目标网站url 目标网站:https://cq.58.com/minsuduanzu/ 让我们看看网站长啥样 ...

  4. Python助力性能测试——报文批量生成

    当前,我国金融体系内交易量持续增长,业务场景日趋复杂.系统交易量的增加,临时产生的集中业务需求,都会使服务器面临考验,因此,需要对系统进行性能测试. 在金融系统中,报文处理是必不可少的.各大金融机构间 ...

  5. python条形码库_python批量生成条形码的示例

    在工作中,有时会遇见需要将数字转换为条码的问题,每次都需要打开条码转换的网站,一次次的转换后截图,一两个还行,但是当需要转换的数量较多时,就会显得特别麻烦,弄不好还会遗漏或者重复,为了解决这个问题,使 ...

  6. 使用Python在Excel中批量生成条形码

    2019独角兽企业重金招聘Python工程师标准>>> 最近在研究盘点机盘点的问题,其中有一部分的商品没有的条形码,就想着自个生成条形码.参考了网上的教程,关于Excel批量生成条形 ...

  7. 【Python实例分析】批量生成海报--自动添加姓名和二维码

    最近参加了老男孩的一个python训练营,里面某项任务是要求在某个海报模板上批量添加姓名和二维码,生成类似下图的海报. 图中我用红色方框标记的是需要修改的地方,先来聊下自己的思路: 1.要进行图片操作 ...

  8. python办公自动化实例(二):批量生成派工单

    场景: 实现效果: 如下图1所示,有如下多条工单,需要向施工单位派发,每条工单都有一个相同模板,如图2所示 图1 图2 通过使用python程序,批量生成这些工单,并转为pdf文件,方便打印,效果如下 ...

  9. 生成批量缩率图_Windows系统实战之:批量生成某类型文件

    在我们的日常工作中,因工作需要批量生成一批文件,今天我就给大家介绍一下如何批量生成我们想要的文件,以文本文件为例. 需要用到的程序有: 1.Microsoft Excel(WPS表格也可以) 2.记事 ...

最新文章

  1. android_launcher的源码详细分析和壁纸修改 .
  2. rxjava获取异步请求的结果_我为什么不再推荐用 RxJava
  3. Microsoft Visual C# 2008 Step by Step
  4. html 横屏内容显示不全_“屏”什么喜欢你,车载显示器有哪些新玩法...
  5. cnpm能用npm install吗_指纹锁一般能用几年? 指纹锁没电了怎么办
  6. iphonexr电池容量_初代手机到iPhone 12,从电池容量变化看充电功率的发展
  7. 计算机怎样辅助与美工结合,环保教案:幼儿园环保美工与信息技术整合案例
  8. Android软硬整合设计与框架揭秘教程
  9. Nexus-NuGet私有仓库服务搭建(一)
  10. 一张图看懂ITIL V3 与ITIL4的主要差异
  11. 有关CATIA软件的几个使用技巧
  12. 工程施工工地进度监控带天气经纬度相机(监理日志不再难写)
  13. java过滤敏感词汇
  14. 百科知识 kux文件如何打开
  15. http server response 一览
  16. 计算机桌面标题栏怎么锁定,(excel图表标题设置)在excel表格中,如何锁定标题栏不被修改?...
  17. 阿里云系统盘扩容及数据盘分区、格式化分区、挂载、取消挂载
  18. 微软电脑管家登陆微软商店 简单无打扰 支持杀毒和垃圾清理等
  19. nodejs安装时遇到的问题及解决方案
  20. 利用 yEd 软件做元数据管理

热门文章

  1. from mysql partition select_玩转select条件查询,避免踩坑
  2. python中ndim是什么_Numpy中ndim、shape、dtype、astype的用法详解
  3. 没有足够的值_元丰通宝值多少钱吗?市场价值如何?有没有足够的收藏空间?...
  4. hql 查询条件 set集合_Redis从入门到深入-Sorted_set的value
  5. 计算机二级c语言填空题答案唯一吗,计算机二级C语言上机填空题及答案.doc
  6. 基于Java+SpringBoot+vue+element实现新冠疫情物资管理系统详细设计
  7. cesium加载entity图片缩放_Cesium中级教程4 – 空间数据可视化(二)
  8. ubuntu mysql支持中文_ubuntu (16.04) server 英文原版 添加中文语言支持 消除java 程序、mysql 数据库不能处理中文的错误...
  9. 一张纸厚度是多少毫米_大洼20毫米水泥纤维板多少钱一张追求至善
  10. C++ open 打开文件