工具:Python3.7

需求描述:将EXCEL中 第二行 数据 填在 word 对应位置上,然后保存为 "姓名+任务.docx"文件。

    再将EXCEL中 第三行 数据 填在 word 对应位置上,然后保存为 "姓名+任务.docx"文件。

    依此类推。

EXCEL数据信息 如下图所示:

 word数据信息 如下图所示:

最终需求结果 如下图所示:

 开始操作:

  第一步:修改成可读模板

    使得excel列名称特殊化,例如在名称之前加个符号,如下图:

              

在word对应位置 填写 该 特殊化 名称,例如:

  第二步:将 excel信息表 以及 word模板表 放在同一文件夹内,例如:

  第二步:运行代码

 完整代码如下:

  1. from docx import Document
  2. from openpyxl import load_workbook
  3. import os
  4.  
  5. path = r'D:\pywork\12' # EXCEL信息与word信息所在文件夹
  6. if not os.path.exists(path + '/' + '任务集'): #如果目标位置 不存在该文件夹 ,则执行下面命令
  7. os.mkdir(path + '/' + '任务集') #创建一个新的文件夹,
  8.  
  9. excel_1= load_workbook(path + '/' + 'excel信息表.xlsx') #打开excel
  10. E1 = excel_1.active #表示当前活跃的表,本案例中 当前活跃表为sheet1
  11. #也可以使用 E1 = excel_1.get_sheet_by_name('Sheet1') 来获取工作表1
  12.  
  13. for hang in range(2, E1.max_row + 1): # 从第2行开始循环,有几行就循环到几
  14. word_1 = Document(path + '/' + 'word模板表.docx') #读取word
  15. for lie in range(1, E1.max_column + 1): # 从第一列开始循环,excel有几列就循环到几
  16. lieming = str(E1.cell(row=1, column=lie).value) # 在第一行中,记录excel中的列值,也就是列名
  17. liezhi = str(E1.cell(row=hang, column=lie).value) #在当前行中,记录excel每列的值
  18.  
  19. if '00:00:00' in liezhi: #判断所取的值中 是否 存在 时间,如果excel中涉及日期,都需要加此判断,否则列值返回的是“日期 时间”
  20. liezhi=liezhi.split()[0] #按照 空格 进行分割,并返回第一个字符串
  21.  
  22. all_duanluo = word_1.paragraphs #读word中 所有 段落 内容
  23. for i in all_duanluo: # 在每一个段落里面 操作
  24. for j in i.runs: #在每一个 分块中 操作
  25. j.text = j.text.replace(lieming, liezhi) # 将分块 里面的 leiming 对应地换成 liezhi,即列名换成列值
  26.  
  27. all_biaoge = word_1.tables #读word中 所有 表格 内容
  28. for m in all_biaoge: #在每一个 表格 中操作
  29. for n in m.rows: #读取某个 表格 的每一行
  30. for q in n.cells: #读取 每一行 的每个小单元格
  31. q.text = q.text.replace(lieming, liezhi)# 将个小单元格里面的 leiming 对应地换成 liezhi,即列名换成列值
  32.  
  33. wenjianming = str(E1.cell(row=hang, column=1).value) #获取文件名
  34. word_1.save(path + '/' + f'任务集/{wenjianming}任务.docx') #保存为 ‘姓名+任务.docx’

 注意:

1.在word模板表 里面 填写 格式化数据时(本例中 填写的是 *XX),要 从前往后 依次填写,如果 运行程序后 出现 没有被填充的问题。 很可能是 word 填写格式化数据时 出了格式 问题。判断是否为 该问题 的代码如下:(前24行代码与上述代码一致。)

正常的返回结果如下:

不正常返回结果如下:

  1. from docx import Document
  2. from openpyxl import load_workbook
  3. import os
  4.  
  5. path = r'D:\pywork\12' # EXCEL信息与word信息所在文件夹
  6. if not os.path.exists(path + '/' + '任务集'): #如果目标位置 不存在该文件夹 ,则执行下面命令
  7. os.mkdir(path + '/' + '任务集') #创建一个新的文件夹,
  8.  
  9. excel_1= load_workbook(path + '/' + 'excel信息表.xlsx') #打开excel
  10. E1 = excel_1.active #表示当前活跃的表,本案例中 当前活跃表为sheet1
  11. #也可以使用 E1 = excel_1.get_sheet_by_name('Sheet1') 来获取工作表1
  12.  
  13. for hang in range(2, E1.max_row + 1): # 从第2行开始循环,有几行就循环到几
  14. word_1 = Document(path + '/' + 'word模板表.docx') #读取word
  15. for lie in range(1, E1.max_column + 1): # 从第一列开始循环,excel有几列就循环到几
  16. lieming = str(E1.cell(row=1, column=lie).value) # 在第一行中,记录excel中的列值,也就是列名
  17. liezhi = str(E1.cell(row=hang, column=lie).value) #在当前行中,记录excel每列的值
  18.  
  19. if '00:00:00' in liezhi: #判断所取的值中 是否 存在 时间,如果excel中涉及日期,都需要加此判断,否则列值返回的是“日期 时间”
  20. liezhi=liezhi.split()[0] #按照 空格 进行分割,并返回第一个字符串
  21.  
  22. all_duanluo = word_1.paragraphs #读word中 所有 段落 内容
  23. for i in all_duanluo: # 在每一个段落里面 操作
  24. for j in i.runs: #在每一个 分块中 操作
  25. print(j.text)

EXCEL 中数据 批量 填充进 word 中的更多相关文章

  1. B表中的pid对应A表中id,查询A表中数据,根据b表中对应a表中该id的数据数目排序

    B表中的pid对应A表中id,查询A表中数据,根据b表中对应a表中该id的数据数目排序 select a.*,count(*) as c from a left join b on a.id=b.ai ...

  2. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)

    最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...

  3. C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表

    调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...

  4. 怎样把excel的数据导入到sqlserver2000数据库中

    在做程序的时候有时需要把excel数据导入到sqlserver2000中,以前没从外部导入过数据,今天刚做了一下导入数据,感觉还是蛮简单的,没做过之前还想着多么的复杂呢,下面就来分享一下我是如何把ex ...

  5. 变量数据是怎么进ARM中的RAM中?

    这篇文章 是从网上复制过来的.觉得不错,分享给大家.原文地址:http://eetrend.com/forum/100028828 ARM的体系结构有很多很多介绍的地方,从其7种模式到CPSR状态寄存 ...

  6. Excel表数据导入Sql Server数据库中

    Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...

  7. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  8. 关于mysql中修改某个字段类型,以及备份表中数据到新建的表中,从新建的表中移除数据到修改过的表中

    1:修改表中某个字段的类型 alter table usertable MODIFY dddd VARCHAR(50); 其中MODIFY是指修改表中字段的属性 alter表示修改表的意思 2:备份表 ...

  9. VBA将指定Excel表数据批量生成到另一个Excel表中,每个sheet表一行数据

    Sub AutoInputValNewExcel() Dim sh1, sh2 As Worksheet Dim ws1, ws2 As Workbook ) ) ).Sheets() iRows = ...

随机推荐

  1. Android 性能优化---布局优化

    Android 性能优化---布局优化 Android 布局绘制原理 布局加载过程 setContentView() --> inflate() -- > getLayout()(I/O操 ...

  2. JVM系列之:Contend注解和false-sharing

    目录 简介 false-sharing的由来 怎么解决? 使用JOL分析 Contended在JDK9中的问题 padded和unpadded性能对比 Contended在JDK中的使用 总结 简介 ...

  3. 推荐IT经理/产品经理,常用工具和网站

    一.  常用必备工具 1)文档工具 石墨文档,在线协作文档工具 https://shimo.im/ 2) 表格工具 麦客,在线问卷调查工具 http://www.mikecrm.com/ 3)脑图工具 ...

  4. ES模糊查询来对应mysql的like查询

    使用ES查询来对应mysql的like查询 建立一个测试索引 PUT /test_like1 { "mappings" : { "properties" : { ...

  5. xss原理绕过防御个人总结

    xss原理 xss产生的原因是将恶意的html脚本代码插入web页面,底层原理和sql注入一样,都是因为js和php等都是解释性语言,会将输入的当做命令执行,所以可以注入恶意代码执行我们想要的内容 x ...

  6. # SpringBoot-环境搭建

    SpringBoot-环境搭建 标签(空格分隔): java,SpringBoot 1.创建Maven工程 2.编写pom文件 <parent> <groupId>org.sp ...

  7. form表单两种提交方式的不同

      我们在使用<Form>表单的时候,最常用的提交方式就是Get和Post.我们都知道这两种方式最大的差别就是安全性,除此之外,它们还有哪些其他的区别,你知道吗?   在<Form& ...

  8. Salt组件(二)

    四.配置管理States 是SaltStack中的配置语言,在日常进行配置管理时需要编写大量的States文件.比如我们需要安装一个包,然后管理一个配置文件,最后保证某个服务正常运行.这里就需要我们编 ...

  9. 05_MySQL数据库

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"软件测试"获取视频和教程资料! b站在线视频 软件测试 ...

  10. 第一部分_Mac技巧

    原文是"池建强"的微信文章,公众号为"MacTalk" 第一天 直接在终端里输入 $ say "英文单词",Mac就会拼读该单词 第二天 使 ...