本文来自趣学python+python办公专栏该专栏致力于兴趣化、实用化的学习python会定期更新。

专栏链接:传送门

目录标题

  • 导读
  • 实际演示阶段
  • 详细介绍该库
  • 细节介绍
  • 点击直接资料领取

导读

上期我们说过了excel批量操作的方法今天盘点一下word

在工作中,我们经常遇到将Excel表中的部分信息填写到Word文档的对应表格中,以生成报告,方便打印。今天我们就来试试如何往固定的Word模板中填写数据。此例要求将Excel档的“收货数据”填写到Word档的“收货记录”中去,并加总收货数量。模板是下面这样的。要求结果是这样的


结果:

实际演示阶段

#从Excel表中提取数据这块不会的可以到专栏里面去看看以前的
from openpyxl import load_workbook
wb = load_workbook("收货数据.xlsx")
ws = wb.active
data=[]
for row in range(2,ws.max_row+1):seq = ws["A"+str(row)].valuesupplier = ws["B"+str(row)].valuematerial_pn = ws["C"+str(row)].valuematerial_model = ws["D"+str(row)].valuedesp = ws["E"+str(row)].valueqty = ws["F"+str(row)].valuedate = ws["G"+str(row)].value.date()info = [seq, supplier, material_pn, material_model, desp, qty, date]data.append(info)
#检查一下数据
data[0]
[1,'供应商HH','PROYY-0001','PROYY-0001CP*-SM00001','SM00001',165,datetime.date(2019, 1, 1)]
#定义数量加总函数
def Sum_list(list):s = 0for i in list: #累加列表中的所有数s+=ireturn s
#加总数量列的所有数字
qty_list=[]
for i in data:qty_list.append(i[5]) #数量在内层列表的第6个位置,索引是5
sum_qty= Sum_list(qty_list) #调用加总函数加总
sum_qty
结果:
2307
#定义合并单元格的函数    在往期也介绍过
def Merge_cells(table,target_list,start_row,col):'''table: 是需要操作的表格target_list: 是目标列表,即含有重复数据的列表start_row: 是开始行,即表格中开始比对数据的行(需要将标题除开)col: 是需要处理数据的列'''start = 0 #开始行计数end = 0 #结束行计数reference = target_list[0] #设定基准,以列表中的第一个字符串开始for i in range(len(target_list)): #遍历列表if target_list[i] != reference: #开始比对,如果内容不同执行如下reference = target_list[i] #基准变成列表中下一个字符串end = i - 1 table.cell(start+start_row,col).merge(table.cell(end+start_row,col))start = end + 1if i == len(target_list) - 1: #遍历到最后一行,按如下操作end = itable.cell(start+start_row,col).merge(table.cell(end+start_row,col))
#数据提取即处理完毕后,就可以往Word的表格中写入数据了
from docx import Document
doc = Document("收货记录模板.docx")
#读取word文档中的第一个表格的第二和第三列除标题和尾部总数行的数据
table = doc.tables[0] #已确定是第一个表格,其索引是0
supplier = [] #存储供应商名称
pn = [] #存储物料编码
for i in data:supplier.append(i[1])pn.append(i[2])
#按需增加行,以便填写数据
for i in range(len(supplier)): #模板中已经有一行了,所以总共只需增加len(supplier)行table.add_row()
#增加好行后先做合并单元格操作
Merge_cells(table,supplier,1,1) #开始合并行为2,索引为1;供应商名称是在2列,索引为1
Merge_cells(table,pn,1,2) #开始合并行为2,索引为1;物料编码是在3列,索引为2#写入数据到表格
for row in range(1,len(supplier)+1):for col in range(7):        table.cell(row,col).text = str(data[row-1][col])max_row = len(table.rows) #获取最大一行
qty_row = max_row-1 #确定需要写入加总数据的一行
table.cell(qty_row,5).merge(table.cell(qty_row,5)) #合并右下角用于填写数量的两个单元格
table.cell(qty_row,4).text = '总数:'
table.cell(qty_row,5).text = str(sum_qty)doc.save("收货记录.docx")

由于合并供应商名称和物料编码两列中的相同内容的单元格,所有需要把这两列的信息从总数据data中单独提取出来。新建了supplier和pn两个空列表,然后遍历data,将数据取出并存入空列表。随后,我们根据实际需要,新增一些空白行,以便后面写入数据。新增行的数量以supplier列表中元素的个数为依据。这个表格已经存在一个空白行,算上外行要填“总数”,只需增加supplier列表中元素的个数对应那么多行就够了。当然这里也可以以列表pn中元素个数为依据,两者是相等的。增加好行后,先调用函数Merge_cells做合并单元格操作(如果先写入数据,再合并,会导致单元格内容重复)。合并完后,就可以写入数据到表格了,此处遍历需要写入数据的行和列,然后从data中提取数据。数据行写完后,还需要写入最后一行的“总数”字样和总的物料数量。最后保存数据

详细介绍该库

细节介绍

关于python-docx
链接:传送门
这里有关于操作的详细介绍我就不给大家搬过来了,有什么问题可以讨论。

特别介绍

向大量Word文档的表格中填写数据相关推荐

  1. wps文档复制粘贴序号_wps 中word文档插入表格,如何插入的表格中实现 序号的自动 填写...

    wps 中word文档插入表格,如何插入的表格中实现 序号的自动 填写以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! w ...

  2. java 操作word中表格_Java 使用Spire.Cloud.Word给Word文档添加表格

    在编辑Word文档时,很多时候需要用到表格,以便能够清晰整洁地表达和归类数据.本文就将介绍如何使用Spire.Cloud.Word给Word文档添加表格.Spire.Cloud.Word提供了Tabl ...

  3. python docx 设置表格字体和格式_python-docx修改已存在的Word文档的表格的字体格式方法...

    搞了好几天的表格字体格式,一直想找一种能直接一次性修改表格所有字体格式的方法(函数),但是无论用什么方法都无法修改表格字体的格式,原因应该是已存在的文档本身就具有某种格式限制,制约着里面表格里面字体格 ...

  4. spring使用freemarker生成word文档包含表格、图片(循环插入)

    spring使用freemarker生成word文档包含表格.图片(循环插入) 效果图 因为测试数据是重复的,所以显示都是重复的数据,替换导入map中的数据可以显示不重复的数据. 操作步骤 1,创建一 ...

  5. python docx 表格复制粘贴_python-docx修改已存在的Word文档的表格的字体格式方法

    搞了好几天的表格字体格式,一直想找一种能直接一次性修改表格所有字体格式的方法(函数),但是无论用什么方法都无法修改表格字体的格式,原因应该是已存在的文档本身就具有某种格式限制,制约着里面表格里面字体格 ...

  6. python docx 设置表格字体和格式,python-docx修改已存在的Word文档的表格的字体格式方法...

    搞了好几天的表格字体格式,一直想找一种能直接一次性修改表格所有字体格式的方法(函数),但是无论用什么方法都无法修改表格字体的格式,原因应该是已存在的文档本身就具有某种格式限制,制约着里面表格里面字体格 ...

  7. web系统中巧用word文档的html格式创建多样式的word文档,WEB系统中巧用WORD文档的HTML格式创建多样式的WORD文档...

    以计算机和现代网络技术为特征的现代信息技术极大地促进了社会经济的发展,基于各行各业的WEB系统的开发与应用也越来越多. >> WEB系统中巧用WORD文档的HTML格式创建多样式的WORD ...

  8. Apache POI 密码保护只读word文档在WPS中无效

    Apache POI 密码保护只读word文档在WPS中无效 最近项目有个要求就是从系统下载的WORD文档需要进行密码保护,防止篡改.于是很自然地想到了用POI去加入只读模式然后用密码保护: XWPF ...

  9. WORD文档里面表格下面太多空白怎么接起来

    WORD文档里面表格下面太多空白怎么接起来 方法一 方法二 参考地址 方法一 选中该表格后,右键点表格属性,勾选行那里的允许跨页断行. 方法二 可能是由于表格宽度不够引起的,内容被自动隐藏了.可以通过 ...

最新文章

  1. 【技术综述】人脸妆造迁移核心技术总结
  2. Makefile中的patsubst函数
  3. Python学习之参数(一)
  4. Parity 錢包合約漏洞
  5. php 访问 sharepoint列表,SharePoint—用REST方式访问列表
  6. maven 修改文件名_Maven 构建配置文件
  7. Scala的所有符号运算符都意味着什么?
  8. 关于vue自定义事件中,传递参数的一点理解
  9. 系统找不到指定的文件。 : No installed service named Apache
  10. linux中hdfs格式化,HDFS操作命令
  11. C语言模块化编程的代码示例
  12. ORA-1653: unable to extend table by 1024 in tablespace(oracle表空间满了的解决方案)
  13. c语言hook函数,另类iOS上的C函数hook
  14. 《windows核心编程》第6章 线程基础
  15. Mac系统中 alt+insert怎么操作?
  16. 设计师必看!10个非常重要的图片无损编辑技巧
  17. 2022年”泰迪杯“数据分析技能赛B题:银行客户忠诚度分析
  18. 【720开发】 spring boot 快速入门
  19. 大数据培训技术Kylin核心算法逐层构建算法
  20. tizen android模拟器,Tizen模拟器与代码崩溃c0000005

热门文章

  1. 软件20-4 陈珊珊 Laravel 2
  2. Android4.0 4.1Keyguard锁屏流程梳理
  3. 注册页面html版本
  4. JavaScript:实现PascalTriangle帕斯卡三角算法 (附完整源码)
  5. Python3 完全平方数
  6. 2021浙江温岭高考成绩查询,台州2021高考成绩排名榜单,台州各高中高考成绩喜报...
  7. 平面设计师经常去的网站——字体网站
  8. java.util.Comparator的用法
  9. iOS 直播登录facebook
  10. Java笔记:JSON