EXCEL 中数据 批量 填充进 word 中
工具:Python3.7
需求描述:将EXCEL中 第二行 数据 填在 word 对应位置上,然后保存为 "姓名+任务.docx"文件。
再将EXCEL中 第三行 数据 填在 word 对应位置上,然后保存为 "姓名+任务.docx"文件。
依此类推。
EXCEL数据信息 如下图所示:
word数据信息 如下图所示:
最终需求结果 如下图所示:
开始操作:
第一步:修改成可读模板
使得excel列名称特殊化,例如在名称之前加个符号,如下图:
在word对应位置 填写 该 特殊化 名称,例如:
第二步:将 excel信息表 以及 word模板表 放在同一文件夹内,例如:
第二步:运行代码
完整代码如下:
from docx import Document
from openpyxl import load_workbook
import os path = r'D:\pywork\12' # EXCEL信息与word信息所在文件夹
if not os.path.exists(path + '/' + '任务集'): #如果目标位置 不存在该文件夹 ,则执行下面命令
os.mkdir(path + '/' + '任务集') #创建一个新的文件夹, excel_1= load_workbook(path + '/' + 'excel信息表.xlsx') #打开excel
E1 = excel_1.active #表示当前活跃的表,本案例中 当前活跃表为sheet1
#也可以使用 E1 = excel_1.get_sheet_by_name('Sheet1') 来获取工作表1 for hang in range(2, E1.max_row + 1): # 从第2行开始循环,有几行就循环到几
word_1 = Document(path + '/' + 'word模板表.docx') #读取word
for lie in range(1, E1.max_column + 1): # 从第一列开始循环,excel有几列就循环到几
lieming = str(E1.cell(row=1, column=lie).value) # 在第一行中,记录excel中的列值,也就是列名
liezhi = str(E1.cell(row=hang, column=lie).value) #在当前行中,记录excel每列的值 if '00:00:00' in liezhi: #判断所取的值中 是否 存在 时间,如果excel中涉及日期,都需要加此判断,否则列值返回的是“日期 时间”
liezhi=liezhi.split()[0] #按照 空格 进行分割,并返回第一个字符串 all_duanluo = word_1.paragraphs #读word中 所有 段落 内容
for i in all_duanluo: # 在每一个段落里面 操作
for j in i.runs: #在每一个 分块中 操作
j.text = j.text.replace(lieming, liezhi) # 将分块 里面的 leiming 对应地换成 liezhi,即列名换成列值 all_biaoge = word_1.tables #读word中 所有 表格 内容
for m in all_biaoge: #在每一个 表格 中操作
for n in m.rows: #读取某个 表格 的每一行
for q in n.cells: #读取 每一行 的每个小单元格
q.text = q.text.replace(lieming, liezhi)# 将个小单元格里面的 leiming 对应地换成 liezhi,即列名换成列值 wenjianming = str(E1.cell(row=hang, column=1).value) #获取文件名
word_1.save(path + '/' + f'任务集/{wenjianming}任务.docx') #保存为 ‘姓名+任务.docx’
注意:
1.在word模板表 里面 填写 格式化数据时(本例中 填写的是 *XX),要 从前往后 依次填写,如果 运行程序后 出现 没有被填充的问题。 很可能是 word 填写格式化数据时 出了格式 问题。判断是否为 该问题 的代码如下:(前24行代码与上述代码一致。)
正常的返回结果如下:
不正常返回结果如下:
from docx import Document
from openpyxl import load_workbook
import os path = r'D:\pywork\12' # EXCEL信息与word信息所在文件夹
if not os.path.exists(path + '/' + '任务集'): #如果目标位置 不存在该文件夹 ,则执行下面命令
os.mkdir(path + '/' + '任务集') #创建一个新的文件夹, excel_1= load_workbook(path + '/' + 'excel信息表.xlsx') #打开excel
E1 = excel_1.active #表示当前活跃的表,本案例中 当前活跃表为sheet1
#也可以使用 E1 = excel_1.get_sheet_by_name('Sheet1') 来获取工作表1 for hang in range(2, E1.max_row + 1): # 从第2行开始循环,有几行就循环到几
word_1 = Document(path + '/' + 'word模板表.docx') #读取word
for lie in range(1, E1.max_column + 1): # 从第一列开始循环,excel有几列就循环到几
lieming = str(E1.cell(row=1, column=lie).value) # 在第一行中,记录excel中的列值,也就是列名
liezhi = str(E1.cell(row=hang, column=lie).value) #在当前行中,记录excel每列的值 if '00:00:00' in liezhi: #判断所取的值中 是否 存在 时间,如果excel中涉及日期,都需要加此判断,否则列值返回的是“日期 时间”
liezhi=liezhi.split()[0] #按照 空格 进行分割,并返回第一个字符串 all_duanluo = word_1.paragraphs #读word中 所有 段落 内容
for i in all_duanluo: # 在每一个段落里面 操作
for j in i.runs: #在每一个 分块中 操作
print(j.text)
EXCEL 中数据 批量 填充进 word 中的更多相关文章
- 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 ...
- Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)
最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
- 怎样把excel的数据导入到sqlserver2000数据库中
在做程序的时候有时需要把excel数据导入到sqlserver2000中,以前没从外部导入过数据,今天刚做了一下导入数据,感觉还是蛮简单的,没做过之前还想着多么的复杂呢,下面就来分享一下我是如何把ex ...
- 变量数据是怎么进ARM中的RAM中?
这篇文章 是从网上复制过来的.觉得不错,分享给大家.原文地址:http://eetrend.com/forum/100028828 ARM的体系结构有很多很多介绍的地方,从其7种模式到CPSR状态寄存 ...
- Excel表数据导入Sql Server数据库中
Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...
- 关于mysql中修改某个字段类型,以及备份表中数据到新建的表中,从新建的表中移除数据到修改过的表中
1:修改表中某个字段的类型 alter table usertable MODIFY dddd VARCHAR(50); 其中MODIFY是指修改表中字段的属性 alter表示修改表的意思 2:备份表 ...
- VBA将指定Excel表数据批量生成到另一个Excel表中,每个sheet表一行数据
Sub AutoInputValNewExcel() Dim sh1, sh2 As Worksheet Dim ws1, ws2 As Workbook ) ) ).Sheets() iRows = ...
随机推荐
- 题解 洛谷 P4098 【[HEOI2013]ALO 】
考虑原序列中的每一个值作为构成最终答案的那个次大值,那么其所在的合法区间最大时,其对答案的贡献最大. 一个值作为最大值时有两个合法的最大区间,一个是左边第二个比其大的位置和右边第一个比其大的位置构成的 ...
- vue中v-for
在vue中我们只要操作数据,就可以渲染和更新数据,这背后的boss就是diff算法 vue和react的虚拟DOM的Diff算法大致相同,其核心是基于两个简单的假设: 1. 俩个相同组件产生类似DOM ...
- Go语言系列之手把手教你撸一个ORM(一)
项目地址:https://github.com/yoyofxteam/yoyodata 欢迎星星,感谢 前言:最近在学习Go语言,就出于学习目的手撸个小架子,欢迎提出宝贵意见,项目使用Mysql数据库 ...
- hostapd阅读(openwrt)-2
深入追踪openwrt下的hostapd之后,发现openwrt无线管理机制格外的复杂,几乎所以的触发与回调均离不开ubus,关于ubus这里不作解释,先大概了解其用途即可(出门左转:https:// ...
- 扯扯Java中的锁
前言 又过去了一个周末,最近陆陆续续的看了<并发编程的艺术>一书,对锁有不少感悟,这次就聊聊Java中的锁事.本文纯粹是漫谈,想到哪说到哪,但准确性肯定会保证,倘若有不正确之处,还请交流指 ...
- 一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式
前言 本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台. 本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念 ...
- Python os.rmdir() 方法
概述 os.rmdir() 方法用于删除指定路径的目录.仅当这文件夹是空的才可以, 否则, 抛出OSError.高佣联盟 www.cgewang.com 语法 rmdir()方法语法格式如下: os. ...
- Python性能分析与优化PDF高清完整版免费下载|百度云盘
百度云盘|Python性能分析与优化PDF高清完整版免费下载 提取码:ubjt 内容简介 全面掌握Python代码性能分析和优化方法,消除性能瓶颈,迅速改善程序性能! 对于Python程序员来说,仅仅 ...
- 教你不编程快速解析 JSON 数据
JSON 是一种轻量级的,不受语言约束的数据存储格式,大部分编程语言都可以解析它,并且对编程人员也十分友好.我们在进行通讯/数据交互时,非常经常用到 JSON 格式. 但是,我们在进行数据存储的时候, ...
- LOJ #10222. 「一本通 6.5 例 4」佳佳的 Fibonacci 题解
题目传送门 如果之前推过斐波那契数列前缀和就更好做(所以题目中给出了). 斐波那契数列前缀和题目链接 先来推一下斐波那契数列前缀和: \[\sum\limits_{i=1}^nf(i) \] 其中 \ ...