【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列)
背景需求:
工会老师求助:如何在word里面插入4*8的框,我怎么也拉不到4*8大小(她用的是我WORD 文本框)

我一听,这又是要手动反复黏贴“文本框”“照片”“文字”的节奏哦
我问:你要做几个人?超过20个,我写个程序批量插图(写代码测试要费时间,如果数量少不如手动做)
工会老师:大约十几个人吧,你能直接插图?我一个个弄太麻烦了。
我说:OK,你把照片和文字发给我吧
材料准备:
全部材料路径(红框两个必备)

第一步:word框架


重要的事情!!!

第二步:图片下载,用“序号+名言+JPG” 方式命名照片


图片文件名结构——“序号”+“名言”+".jpg"
每位老师的序号和名言都不同



WORD里面表格的文字就是提取“图片名称里面的索引”2“到导引”倒数-4“中间的内容(留头,不留尾巴,尾部索引+1)

代码展示:
'''
工会小照片插入同一个WORD里
阿夏
时间:2023年9月7日)'''
import os
from PIL import Image
import randomimport os,time
import docx
from docx import Document
from docx.shared import Inches,Cm,Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qnfrom docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColorprint('----------第1步:把打照片变成小照片------------')# 减小图片质量像素
pr=r"C:\Users\jg2yXRZ\OneDrive\桌面\工会教师小照片\教师照片座右铭"# 新建小图文件夹
smallpath=pr[:-7]+'\\'+'教师照片座右铭(小图)'
os.mkdir(smallpath)imgs1=os.listdir(pr)
print(imgs1)
for img1 in imgs1:# print(img1)if img1.endswith(".jpg"):a=pr+'\\'+img1 # 减小图片质量像素img = Image.open(a)w,h = img.sizew,h = round(w * 0.2),round(h * 0.2) # // 去掉浮点,防报错img = img.resize((w,h), Image.ANTIALIAS)img.save(smallpath+'\\'+img1, optimize=True, quality=85) # 9.99MB照片变成127KB # 质量为85效果最好print('----------第2步:读取写入小照片和文字------------')path=[]
name=[]
imgs2=os.listdir(smallpath)
for img2 in imgs2:if img1.endswith(".jpg"):path.append(smallpath+'\\'+img2)name.append(img2[2:-4])
print(path)
print(name)# 制作零时文件夹
lspath=pr[:-7]+'\\'+'零时Word'
os.mkdir(lspath)# 制作12个docx
for z in range(0,len(path)): doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\工会教师小照片\模板.docx')
# # 制作列表# 单元格位置3*4格table = doc.tables[0] # 4567(8) k=path[z] k2=name[z] # 写入图片run=doc.tables[0].cell(0,0).paragraphs[0].add_run() # 在第1个表格中第2个单元格内插入国旗run.add_picture('{}'.format(k),width=Cm(3.5),height=Cm(6))table.cell(0,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.LEFT #居中 # 写入序号和生肖名称run=table.cell(1,0).paragraphs[0].add_run(k2) # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name = '楷体'#输入时默认华文彩云字体# run.font.size = Pt(46) #输入字体大小默认30号 换行(一页一份大卡片run.font.size = Pt(10) #输入字体大小默认30号 一行里(可以一页两份)run.font.bold= True #是否加粗run.font.color.rgb = RGBColor(0,0,0) #数字小,颜色深0-255# paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '楷体')#将输入语句中的中文部分字体变为华文行楷table.cell(1,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中 endlisth=lspath+'\\{}.docx'.format(z)doc.save(endlisth) print('----------第3步:doc 文档合并------------') # 合并所有Word
import win32com.client as win32
import os
word = win32.gencache.EnsureDispatch('Word.Application')
#启动word对象应用
word.Visible = False
path = lspath
files = []
for filename in os.listdir(path):filename = os.path.join(path,filename)files.append(filename)#新建合并后的文档(使用模板,进行12个文件夹的合并,把12个文件夹的内容贴到已有的模板(包含0.7边、四分栏))
output = word.Documents.Add(r'C:\Users\jg2yXRZ\OneDrive\桌面\工会教师小照片\模板.docx')
for file in files:output.Application.Selection.InsertFile(file)#拼接文档#获取合并后文档的内容doc = output.Range(output.Content.Start, output.Content.End)# 合并word
lspathall=pr[:-7]+'\\小照片合并打印(需手动整理).docx'output.SaveAs(lspathall) #保存
output.Close()print('----------第4步:删除临时文件夹------------')
import shutil
shutil.rmtree(lspath) #递归删除文件夹,即:删除非空文件夹
shutil.rmtree(smallpath) # 合并word打开
lspathall=pr[:-7]+'\\小照片合并打印(需手动整理).docx'
终端运行(直接运行)

运行中,先出现“小图”文件夹(最后会删掉)
(这些黄衣服的照片是请摄影师拍摄的,每张图片10MB,如果插到word里,整个word太大了,所以先压缩成小图)



做小图的代码(质量改成85)
运行中,其次会出现“零时WORD”文件夹,这是存放13个文档(每个文档只有一个单元格,不同的照片和其喜欢的名言)



word合并版




运行结束:


必须调整图片质量(制作小图)的意义

调整:
发给领导后,领导提示修改意见

这一刻觉得写个代码太值得了,只要微调一个格子,就能批量做13份照片,绝对比人工调13次表格和照片方便!!!
调整方法:单元格宽度修改

现在就是3.5*8的单元格(包含小照片和名言)

其他提示:关于表格与表格之间的空行

如果不空第一行会出现什么结果呢?

结果,虽然第一张照片顶格了,但是图片与图片之间被表格黏连了(一个空行回车也在表格)


需求:工会老师要用花边剪刀裁剪,就需要每张小照片周边都是白色边框,所以我还是让“模板边框前面的一行回车空行,确保,每个小照片周边都是白色。”
就是需要打开后手动删除第一行的回车。确保每张照片都是矩阵排列。

感悟:
前几天我总是问老师:数量多不多?多的话(超过10个)我写个代码批量做一下(写代码、测试代码都要时间)。少的话(10个以内)手动做吧(速度更快)
今天我觉得:既然同事们来求助,一定是潜意识希望有一个提高制作效率的方法,手动复制黏贴有点累、烦。
现在哪怕只有5个重复黏贴电脑操作,我也希望用代码(word模板、EXCEL)。因为手动做一次没问题,但一旦需要调整大小样式,就出现大量的重复操作,让人感觉低效、琐碎、不值得
小结:python批量解决这个问题,大大减少人工重复劳动。
1、在遇到输入错误(手动操作有遗漏、错误)时,可以快速批量修正,提高正确率
2、在遇到模板调整(字体、大小、颜色)时,更能以一当百,自动复制黏贴,快速生成统一新样式,极大提高工作效率。
进步:
上一次制作WORD文本框(爱心、五角星)标签字帖(只能插入EXCEL文字){{name}},
本次运用word表格单元格(正方形、长方形)制作照片帖(可以写入文字和照片),进一步丰富了批量办公制作的范畴。(读取列表,写入单元格)
继续探究更多python与办公的可能性,提高工作效率。优化版式结构。
相关文章:
【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列)
背景需求: 工会老师求助:如何在word里面插入4*8的框,我怎么也拉不到4*8大小(她用的是我WORD 文本框) 我一听,这又是要手动反复黏贴“文本框”“照片”“文字”的节奏哦 我问:你要做几个人&…...
【Spring】Spring Bean的4种依赖注入方式
文章目录 前言1. 构造方法注入2. set方法注入3. 自动装配4. 注解 前言 所谓依赖注入,其实就是给对象里的属性赋值,因为对象里有其他对象,因此就形成了依赖。Spring有4种方式来给属性赋值: 构造方法注入set方法注入自动装配注解 …...
overleaf 参考文献引用,创建引用目录.bib文件,在文档中引用参考文献,生成参考文献列表
目录 1 创建一个Overleaf项目 2 导入或创建 .bib 文件 2.1 导入 .bib 文件: 参考文献的 .bib文件获取步骤 (1)打开谷歌学术 (2)输入文献题目 (3)点击引用,然后选择BibTex格式…...
算法通关村第十八关:青铜挑战-回溯是怎么回事
青铜挑战-回溯是怎么回事 回溯,最重要的算法之一 主要解决一些暴力枚举也搞不定的问题,例如组合、分割、子集、排列、棋盘等 从性能角度来看回溯算法的效率并不高,但对于这些暴力都搞不定的算法能出结果就很好了,效率低点没关系…...
【Redis】深入探索 Redis 的数据类型 —— 字符串 string
文章目录 前言一、string 类型的操作命令设置和获取相关命令1. SET 和 GET2. MSET 和 MGET3. SETNX、SETEX、SETPX 计数相关命令1. INCR 和 INCRBY2. DECR 和 DECRBY3. INCRBYFLOAT 字符串操作相关命令1. APPEND2. GETRANGE3. SETRANGE4. STRLEN string 相关命令总结 二、strin…...
Linux操作命令笔记
Linux Linux的字母大小写下载和卸载软件更新查看空间使用情况当前目录所在的位置查看文件中的内容查看目录下的文件重启关机移动文件磁盘管理软件修改权限删除文件或文件夹新建文件夹移动一个文件夹文件重命名编译C和C文件VIM编辑器的相关操作 Linux的字母大小写 Linux的文件以…...
1.8 工程相关解析(各种文件,资源访问
目录 1.8 工程相关解析(各种文件,资源访问) 分类 Android 基础入门教程 本节引言: 1.工程项目结构解析: 1.res资源文件夹介绍: 2.如何去使用这些资源 2.深入了解三个文件: MainActivity.java: 布局…...
unity 前后左右 移动
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { public float moveSpeed 5f; // 移动速度 public float rotateSpeed 180f; // 旋转速度 // Start is called before the firs…...
计算机视觉传统图像处理库opencv的使用
人工智能领域的图像处理分支,整理了计算机视觉传统图像处理库opencv的使用网址链接。 opencv使用范围,主要用在计算机视觉、视频分析、机器学习、医学影像处理、自动驾驶、工业检测、游戏开发上。 1):opencv效果视频 opencv10个应…...
【数据库】通过实例讲清楚,Mongodb的增删查改,分组查询,聚合查询aggregate
目录 一.基础概念 二.数据库的管理 1.创建数据库 2.删除数据库 二.集合的管理 1.显示所有集合 2.创建集合 3.删除当前集合 4.向集合中插入元素 三.文档的管理 1.文档插入 2.文档的更新 3.文档的删除 4.文档查询 (1)查询基本语法࿱…...
vue + video.js 加载多种视频流(HLS、FLV、RTMP、RTSP)
起因: 由于需要在一个项目内接入多种常用的视频流,所以接触到video.js,这里就做个记录。 框架: vue2 video.js videojs-contrib-hls videojs-flvjs-es6 videojs-flash video-js.swf vue安装就不讲了,直接从项目…...
用 Python 微调 ChatGPT (GPT-3.5 Turbo)
用 Python 微调 ChatGPT (GPT-3.5 Turbo) 备受期待的 GPT-3.5 Turbo 微调功能现已推出,并且为今年秋季即将发布的 GPT-4 微调功能奠定了基础。 这不仅仅是一次简单的更新——它是一个游戏规则改变者,为开发人员提供了完美定制人工智能模型的关键解决方案…...
单目标应用:基于蜘蛛蜂优化算法(Spider wasp optimizer,SWO)的微电网优化调度MATLAB
一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、蜘蛛蜂优化算法 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该…...
2023年7月京东饮料行业数据分析(京东运营数据分析)
饮料消费已成为当下快消品行业里的主力军,随着社会群体喜好的改变、消费群体的不断扩大,可选择的饮料种类越来越多,我国饮料市场的体量也较为庞大。根据鲸参谋电商数据分析平台的数据显示,今年7月份,京东平台饮料的销量…...
执行 JUnit 单元测试前,修改环境变量
同一份代码,在不改变配置文件的情况下,可以连接不同的数据库,进行JUnit测试。 非开发、测试、生产环境的区别。而是 我就站在这里,指哪打哪! 避免重复造轮子,参考博文: 使用junit&spri…...
openGauss学习笔记-63 openGauss 数据库管理-资源池化架构
文章目录 openGauss学习笔记-63 openGauss 数据库管理-资源池化架构 openGauss学习笔记-63 openGauss 数据库管理-资源池化架构 本文档主要介绍资源池化架构下的一些最佳实践和使用注意事项,用于支撑对相关特性感兴趣的开发者可以快速部署、实践或进行定制化开发。…...
计算机竞赛 基于深度学习的植物识别算法 - cnn opencv python
文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …...
ChatGPT如何应对紧急情况和灾害应对?
ChatGPT是一个文本生成模型,它可以用于各种任务,但在处理紧急情况和灾害应对方面,它有一些潜在的用途和限制。在这篇文章中,我们将讨论ChatGPT在紧急情况和灾害应对中的应用,以及如何充分利用这一技术,并提…...
ElementUI浅尝辄止37:Select 选择器
当选项过多时,使用下拉菜单展示并选择内容。 1.如何使用?基础单选 v-model的值为当前被选中的el-option的 value 属性值 <template><el-select v-model"value" placeholder"请选择"><el-optionv-for"item in …...
PCL 基于任意四点计算球心坐标
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 继续基于之前的思路PCL 基于三个点计算圆心坐标之二(二维),假设存在四个不共面的点, ( x 1 , y 1 ) (x_1,y_1)...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
