公司研发部门每年都需要向税务局提交一份出货清单,以申报研发费用。要求按日期来汇总,每日只要有出货,就需要一份出货单。出货总表包含数百条出货记录。假设一年有200天都出过货,那按照常规的方法,需要从总表中复制每天的出货记录,然后粘贴到每日出货清单里面,重复200次。效率低下不说,还容易出错。

下面我们就让Python来代劳,一次写码,终身受益,呲牙......

总表和模板分别长这样的:

#1.从总表中提取信息
from openpyxl import load_workbook
wb = load_workbook("data总表.xlsx")
ws= wb['Sheet']
data = {} #用于储存提取的信息
for row in range(2, ws.max_row+1): #从第2行开始(第1行是标题)遍历工作表每一行,将数据提取出来customer = ws['B' + str(row)].value #B列为客户信息model= ws['C' + str(row)].value #C列为型号PN= ws['F' + str(row)].value #F列为零件号qty= ws['G' + str(row)].value #G列为数量date = ws['D' + str(row)].value.date() #D列为日期时间,因只要日期,不要时间,所以用date()只提取日期info_list=[customer,model,PN,qty] #将以上信息放入列表info_listdata.setdefault(date,[]) #data字典将以日期date作为键,当天的所有产品信息组成的列表嵌套列表作为值data[date].append(info_list) #将单个产品信息的列表放入包含所有产品的大列表

我们先从总表中提取信息,放到一个字典里面,方便写入Excel工作表时调用。导入openpyxl模块,用于打开并读取总表里面的信息。使用load_workbook打开总表,存入变量wb,然后选择工作表Sheet,存入变量ws。建立空字典data,用于存储数据。一开始,我们需要构思好数据结构。由于我们需要将每天的所有出货项目填入一页表,所以要用日期作为字典的键。字典的值就是产品的4个信息,即客户、型号、零件号和数量。有时候,一天只有一条出货信息,但有时有两个即以上,所以我们需要使用嵌套列表来作为字典的值。

然后我们使用for循环遍历总表,从第二行开始直到最后一行。因为range(a,b)是取不到b的,所以需要ws.max_row+1。每读取一行,我们就将客户信息,型号,零件号和数量存入info_list里面。data.setdefault(date,[])是用于将日期作为键,且在遍历到具有相同日期的产品信息的时候,不覆盖原来的键(日期),而是将其值添加到后面的空列表内,即嵌套列表。

数据搜集完成后,我们可以打印其键值对,以便观察是否是我们想要的。我们可以看到这正是我们要的结果,键就是日期,值就是当天出货的所有的产品信息的嵌套列表。

for key,value in data.items(): #打印键值对,以便观察print(key,value)>>
2017-03-15 [['客户4', 'XYZ0069', 'QP006UUU00', 6]]
2017-03-21 [['客户1', 'XYZ0038', 'XW009UUU00', 80]]
2017-03-27 [['客户8', 'XYZ0043', 'PQ016UUU00', 22]]
2017-04-03 [['客户3', 'XYZ0022', 'EP002UUU00', 9], ['客户3', 'XYZ0022', 'EP002UUU00', 4]]
2017-04-08 [['客户7', 'XYZ0027', 'PUUU072UUU00', 11]]
2017-05-05 [['客户7', 'XYZ0002', 'PUUU210UUU00', 6], ['客户7', 'XYZ0002', 'PUUU210UUU00', 8], ['客户7', 'XYZ0027', 'PUUU072UUU00', 114]]
2017-05-06 [['客户7', 'XYZ0027', 'PUUU072UUU00', 70]]
2017-05-10 [['客户11', 'XYZ0024', 'ST001UUU00', 140]]
2017-05-15 [['客户3', 'XYZ0021', 'EP002UUU00', 360]]
2017-05-19 [['客户5', 'XYZ0047', 'QE003UUU00', 8], ['客户5', 'XYZ0047', 'QE003UUU00', 11]]
2017-05-24 [['客户12', 'XYZ0054', 'SQ149UUU00', 2], ['客户12', 'XYZ0049', 'SQ148UUU00', 21], ['客户12', 'XYZ0051', 'SQ148UUU00', 29], ['客户12', 'XYZ0050', 'SQ148UUU00', 29], ['客户12', 'XYZ0048', 'SQ148UUU00', 20], ['客户12', 'XYZ0052', 'SQ148UUU00', 21], ['客户12', 'XYZ0053', 'SQ148UUU00', 21], ['客户13', 'XYZ0072', 'TS057UUU00', 20]]
-----略-----

数据获取完成后,就可以开始创建并写入每日出货清单了。

#2.将提取的信息按日期写入新建的Excel表
wb_day = load_workbook("data出货单模板.xlsx")
ws_day= wb_day['temp']
for date in data.keys():ws_new = wb_day.copy_worksheet(ws_day) #复制模板中的工作表ws_new.title=str(date)[-5:] #以日期为新工作表命名ws_new.cell(row=3,column=5).value=date #E3单元格固定填写日期i=5 #计数器,从第5行开始填写起始值为5for product in data[date]: #获取每天出货的每个产品信息,逐个写入工作表ws_new.cell(row=i,column=2).value=product[0]ws_new.cell(row=i,column=3).value=product[1]ws_new.cell(row=i,column=4).value=product[2]ws_new.cell(row=i,column=5).value=product[3]i+=1 #每写一行,计数器就需要加1,以便从下一行接着写入
wb_day.save("data出货单.xlsx")

我们事先设置好了一个产品信息为空的Excel模板,随后让程序将每天的出货信息填入即可。先打开模板“出货单模板.xlsx”,然后获取其工作表“temp”,以便后续复制并写入数据。我们建立一个for循环,遍历字典data里面的所有的键(即日期)。使用copy_worksheet复制模板工作表,存入ws_new,并将其标题重命名为日期ws_new.title。E3单元格是填入固定的值,即日期,所以直接赋值为date。因为每天可能有2个及以上的出货信息,那就需要在出货清单中填写几行信息,所以需要设置一个行计数器i,其初始值为5,因为出货清单是从第5行开始的。每填完一行信息,计数器就加1i+=1,然后就可以填写下一行了。

所有信息填写完后,就保存数据wb_day.save("data出货单.xlsx"),任务完成。几百个工作表瞬间填完,结果如下图:

所有源代码和说明都在Jupyter notebook上完成,所用到的Excel 资料已上传GitHub, 欢迎Fork或下载到本地随意玩。。。转载请注明出处,谢谢。GitHub链接:https://github.com/weidylan/Office_Automation_by_Using_Python微信公众号:Python操作Office软件高效工作

字典写入excel_实例9:用Python自动生成Excel档每日出货清单相关推荐

  1. 读取excel日期 c++_实例9:用Python自动生成Excel档每日出货清单

    公司研发部门每年都需要向税务局提交一份出货清单,以申报研发费用.要求按日期来汇总,每日只要有出货,就需要一份出货单.出货总表包含数百条出货记录.假设一年有200天都出过货,那按照常规的方法,需要从总表 ...

  2. python生成excel模板_实例9:用Python自动生成Excel档每日出货清单

    公司研发部门每年都需要向税务局提交一份出货清单,以申报研发费用.要求按日期来汇总,每日只要有出货,就需要一份出货单.出货总表包含数百条出货记录.假设一年有200天都出过货,那按照常规的方法,需要从总表 ...

  3. python自动汇总表格_用Python自动生成Excel报表

    作者 / 来源:林骥(ID:linjiwx) 01 安装和导入模块 以 Python 中的 openpyxl 模块为例,它能够读取和修改 Excel 文件,如果你还没有安装,可以通过以下命令进行安装: ...

  4. 用Python自动生成Excel报表

    在日常工作中,可能会有一些重复无聊的任务,比如说,从 Excel 或数据库中收集一些数据,设置相应的数据格式并做成报表. 类似这种重复无聊的任务,我们完全可以交给 Python 去自动完成,只要第一次 ...

  5. 用 Python 自动生成 Excel 数据报表~

    大家好,我是小z 今天给大家来一波实战,使用Python自动化生成数据报表! 从一条条的数据中,创建出一张数据报表,得出你想要的东西,提高效率. 主要使用到pandas.xlwings以及matplo ...

  6. 字典写入excel_将文本数据信息输出到excel文件

    大家好,我们今日讲解"VBA信息获取与处理"教程中第十六个专题"将Excel信息传递给Powerpoint及文本文件"的第四节"将txt数据信息输出到 ...

  7. python自动生成excel报表

    1.将SQL语句查询的内容,直接写入到excel报表中,以下为全部脚本.要求:此版本必须运维在windows平台,并且安装了excel程序,excel版本不限. python版本为2.7 if b 判 ...

  8. 用Python自动生成Excel数据报表!

    大家好,我是辰哥~ 点击下方名片关注和星标『Python研究者』!

  9. Python自动生成代码 - 通过tkinter图形化操作生成代码框架

    Python自动生成代码 - 通过tkinter图形化操作生成代码框架 背景 脚本代码 Demo_CodeGenerator.py display.py FileHandler.py: 脚本运行结果: ...

  10. 准工业级代码分享:Python用于自动生成EXCEL周期报告

    前言 Python自动化在我看来一直是个小打小闹的需求,无法独立成为工业级或者商业级的产品需求.尤其是Python操作PPT,在我看来根本没有一点用武之地.因为好的商业PPT远不是枯燥的复制和粘贴,绝 ...

最新文章

  1. 服务器信号为970101,cDIN_EN_ISO_306.970101精选.pdf
  2. 创建型设计模式对比总结 设计模式(八)
  3. extjs chart无法在panel中显示_手绘风格的 JS 图表库:Chart.xkcd
  4. c++ Segmentation fault (core dumped) 的一个实例
  5. 信号灯文件锁linux线程,linux——线程同步(互斥量、条件变量、信号灯、文件锁)...
  6. Python多进程及多参数的处理方法
  7. 斯诺登NFT作品拍得者PleasrDAO将继续收藏NFT艺术品
  8. sql 左联接 全联接_学习SQL:联接多个表
  9. 判断conime.exe是不是病毒!
  10. javase2021最强学习线路没有之一
  11. 通过bitmap改变图片的大小
  12. pinpoint全链路监控安装部署(支持dubbo)
  13. 软件测试——佣金问题测试用例练习
  14. php 星际争霸 面向对象,星际争霸之php面向对象(一)
  15. 大陆高校毕业IEEE fellow榜单
  16. python: reverse reversed 函数
  17. SAP小技巧 发票校验BAPI调用总结
  18. Devops 基础篇之使用Jenkins构建自由风格、Maven、流水线项目(四)
  19. 大数据周会-本周学习内容总结013
  20. 这几个CNAD领域对实验人员的要求,赶紧收藏

热门文章

  1. Hive-获取本月的第一天,本月的最后一天,本月的天数
  2. win系统磁盘管理知识
  3. UFS 3.1协议分析(第一至四章) -- UFS概述
  4. javascript书签工具
  5. qcc512x_qcc302x笔记之环境搭建(一)
  6. E45: 'readonly' option is set (add ! to override)报错如何解决
  7. 智能识别系统设计---图像特征提取
  8. mysql ereg_php5.3x不再支持ereg和eregi,解决方法
  9. 美创解读|《数据安全法》实施,企业数据安全合规技术能力建设
  10. Js apply方法详解,及其apply()方法的妙用