【办公类-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与办公的可能性,提高工作效率。优化版式结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WEB APIs day6

一、正则表达式 RegExp是正则表达式的意思 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" co…

【教程】安防监控/视频存储/视频汇聚平台EasyCVR接入智能分析网关V4的操作步骤

TSINGSEE青犀AI边缘计算网关硬件 —— 智能分析网关目前有5个版本&#xff1a;V1、V2、V3、V4、V5&#xff0c;每个版本都能实现对监控视频的智能识别和分析&#xff0c;支持抓拍、记录、告警等&#xff0c;每个版本在算法模型及性能配置上略有不同。硬件可实现的AI检测包括&am…

1987-2021年全国31省专利申请数和授权数

1987-2021年全国31省国内三种专利申请数和授权数 1、时间&#xff1a;1987-2021年 2、来源&#xff1a;整理自国家统计局、科技统计年鉴、各省年鉴 3、范围&#xff1a;31省市 4、指标&#xff1a;国内专利申请受理量、国内发明专利申请受理量、国内实用新型专利申请受理量…

Java“牵手”阿里巴巴商品详情数据,阿里巴巴商品详情API接口,阿里巴巴国际站API接口申请指南

阿里巴巴平台商品详情接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取阿里巴巴商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口&#xf…

高频知识汇总 |【计算机网络】面试题汇总(万字长文通俗易懂)

我之前也已经在写了好几篇高频知识点汇总&#xff0c;简要介绍一下&#xff0c;有需要的同学可以点进去先收藏&#xff0c;之后用到时可以看一看。如果有帮助的话&#xff0c;希望大家给个赞&#xff0c;给个收藏&#xff01;有疑问的也可以在评论区留言讨论&#xff0c;能帮的…

WebStorm2023新版设置多个窗口,支持同时显示多个项目工程

调整设置 Appearance & Behavior -> System Settings> Project open project in New window&#xff1a;

数据结构之队列的实现(附源码)

目录 一、队列的概念及结构 二、队列的实现 拓展&#xff1a;循环队列 三、初学的队列以及栈和队列结合的练习题 一、队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(Fi…

RabbitMQ:work结构

> 只需要在消费者端&#xff0c;添加Qos能力以及更改为手动ack即可让消费者&#xff0c;根据自己的能力去消费指定的消息&#xff0c;而不是默认情况下由RabbitMQ平均分配了&#xff0c;生产者不变&#xff0c;正常发布消息到默认的exchange > 消费者指定Qoa和手动ack …

uview 组件 u-form-item 点击事件

问题 click"showCalendar(false)"点击没反应 原因&#xff1a; 组件未定义此事件&#xff0c;可使用原生点击事件.native click.native"showCalendar()" <u-form-item label"开始时间" label-width"150" right-icon"arrow…

【C++】模拟实现二叉搜索树的增删查改功能

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;C仓库 个人专栏&#xff1a;C专栏 文章目录 一、二叉搜索树的Insert操作&#xff08;非递归&#xff09;分析过程代码求解 二、二叉搜索树的Erase操作&#xff08;非递归&#xff09;分析过程代码求解…

电脑数据恢复软件都有哪些,哪个好用

当涉及到机房使用的系统还原软件时&#xff0c;选择一个强大且稳定的工具对于确保计算机系统的安全性和可靠性至关重要。以下是五款常见的系统还原软件&#xff0c;它们具有出色的功能和性能&#xff0c;以满足不同用户的需求&#xff0c;大家可根据自己的需求来选择。 云顷还…

MySQL的概述、版本、安装过程

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、MySQL的概述 二、MySQL的版本 三、MySQL的下载与安装 前言 本文将来谈谈MySQL的概述&#xff0c;MySQL的版本&#xff0c;以及它…

4.3.3.1 【MySQL】CHAR(M)列的存储格式

我们知道 Compact 行格式在 CHAR(M) 类型的列中存储数据的时候还挺麻烦&#xff0c;分变长字符集和定长字符集的情况&#xff0c;而在 Redundant 行格式中十分干脆&#xff0c;不管该列使用的字符集是啥&#xff0c;只要是使用 CHAR(M) 类型&#xff0c;占用的真实数据空间就是…

论文简读 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

论文地址&#xff1a;https://arxiv.org/pdf/2106.09685.pdf 项目地址&#xff1a;https://github.com/microsoft/LoRA 全文翻译地址&#xff1a;https://zhuanlan.zhihu.com/p/611557340 本来想自行翻译的&#xff0c;但最近没有空 1、关键凝练 1.1 LORA是什么&#xff1f; …

sentinel熔断报java.lang.reflect.UndeclaredThrowableException

背景&#xff1a;内部要进行应用jdk&springboot升级&#xff0c;因此也需要将Spring Cloud Hystrix 替换成alibaba sentinel。 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</a…

异步编程 - 12 异步、基于事件驱动的网络编程框架 Netty

文章目录 Netty概述Netty中的一些概念Netty的线程模型Netty Server端Netty Netty 端 TCP半包与粘包问题基于Netty与CompletableFuture实现RPC异步调用 Netty概述 Netty是一个异步、基于事件驱动的网络应用程序框架&#xff0c;其对Java NIO进行了封装&#xff0c;大大简化了TC…

阿里云云主机免费试用三个月

试用链接如下&#xff1a; 阿里云云产品免费试用 云主机 费用试用三个月&#xff0c;每月750小时 实例规格 1核(vCPU) 2 GiB S6 系列机型 适用搭建网站等场景 网络带宽 1M 公网固定网络带宽 云盘40 GiB 真香&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

促科技创新:高德数据优化篇之OceanBase最佳实践

本文作者&#xff1a; 振飞&#xff08;高德地图总裁&#xff09; 炳蔚&#xff08;高德技术服务平台负责人&#xff09; 福辰&#xff08;高德服务端架构师&#xff09; 背景 高德成立于2002年&#xff0c;是中国领先的移动数字地图、导航及实时交通信息服务提供商&#xff0c…

04、javascript 修改对象中原有的属性值、修改对象中原有属性的名字(两种方式)、添加对象中新属性等的操作

1、修改对象中原有的属性值 其一、代码为&#xff1a; // 想将 obj 中的 flag 值&#xff0c;根据不同的值来变化(即&#xff1a;修改对象中原有的属性值)&#xff1b; let obj {"port": "port_0","desc": "desc_0","flag&quo…

qt作业day2

//widget.cpp#include "widget.h" #include "ui_widget.h"void Widget::usr_login() {if("admin" this->edit_acc->text()){if("123456" this->edit_psd->text()){speech->say("登录成功");emit jump_sig1…