【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列)

2023-11-15

背景需求:

工会老师求助:如何在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 random

import 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 qn

from docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor


print('----------第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.size
        w,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._element
    r.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'


   

终端运行(直接运行)

运行中,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列) 的相关文章

  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • 【Linux驱动】copy_to_user 、copy_from_user 函数

    用户一般访问内核 需要从用户态变为内核态 然后再访问内核 这么做的目的是防止用户随意篡改内核 在编写某个外设的驱动时 我们需要实现内核中的 read 和 write 函数 此时站在内核的角度 无法直接读取用户缓冲区 或者 无法直接向用户缓冲
  • GBDT与xgboost :流失预测 shap解释 调参 保存调参好的模型

    集成学习 集成学习的方式分为两类 个体的学习器之间存在强依赖关系 必须串行生成序列化方法 代表 Boosting 个体学习器之间不存在强依赖关系 可同时生成并行化方法 代表是Bagging和随机森林 bagging boosting sta
  • workbench拓扑优化教程_拓扑优化(Topology Optimization)浅谈

    近期刚刚完成了某产品吊重梁的拓扑优化分析 稍微整理下这方面的内容 如有不恰当的地方 还望各位大佬指正 拓扑优化 topology optimization 是一种根据给定的负载情况 约束条件和性能指标 在给定的设计区域内对材料分布进行优化的
  • Linux中常用操作命令

    一 常用的文件 目录操作命令 这是我们使用得最多的命令了 Linux最基础的命令 可用 pwd命令查看用户的当前目录 可用 cd 命令来切换目录 表示当前目录 表示当前目录的上一级目录 父目录 表示用 cd 命令切换目录前所在的目录 表示用
  • python3 selenium webdriver.Chrome php 爬取汽车之家所有车型详情数据[开源版]

    介绍 本接口是车型库api的补充 用于爬取汽车之家所有车型详情数据 开源地址 https gitee com web CarApi tree master python 软件架构 python3 selenium webdriver Chr
  • 2020数字中国创新大赛 • 算法赛道冠军技术方案分享

    写在前面的话 作者说 我是来自京东数科的朱翔宇 也是此次大赛 Champion Chasing Boy 团队的 DOTA 常用ID 在与队友 鱼遇雨欲语与余 京东零售 尘沙杰少 林有夕 嗯哼哼唧的共同努力下 最终在 2020数字中国创新大赛
  • XSS-Game 通关教程,XSS-Game level1-18,XSS靶场通关教程

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 专栏简介 此文章已录入专栏 靶场通关教程 XSS Game XSS Game level1 XSS Game level2 X
  • 国内好用的CRM框架推荐和介绍

    一 如何选择CRM管理系统的方法 选择适合自己的CRM管理系统是企业客户关系管理的重要决策之一 需要根据自身的需求和实际情况进行选择 下面介绍几个选择比较好的CRM管理系统的方法 1 确定功能需求 企业需要根据自身的业务特点和管理需求 确定
  • maven高级-黑马-笔记

    目录 1 分模块开发 2 依赖管理 依赖冲突 可选依赖和排除依赖 3 聚合和继承 聚合 继承 3 属性 属性 4 多环境配置与应用 多环境开发 跳过测试 5 私服 1 分模块开发 1 创建Maven模块 2 书写模块代码 分模块开发需要先针
  • VS Code插件汇总

    插件 Basic Chinese Simplified Language Pack C C C C CMake Tools C C Extension Pack Web Open in browser Microsoft Edge Tool
  • 华为OD题目: 货币单位换算

    package com sf ccmas video config odd od12 import java util 货币单位换算 时间限制 1s空间限制 256MB 限定语言 不限 题目描述 记账本上记录了若干条多国货币金额 需要转换成
  • 【通信原理】信道编码——线性分组码

    线性分组码 线性分组码 有两个特点 一个是线性 一个是分组 线性是指校验位和数据位成线性关系 可以通过线性方程直接求得 分组是指校验位由当前码组的数据位唯一确定 比如 n k 线性分组码 指码长为n 数据位为k的编码方案 汉明码是线性分组码
  • 制作自己的数据集

    目录 自制数据集 解决本领域应用 编辑 编辑 数据增强 扩充数据集 断点续训 存取模型 编辑参数提取 把参数存入文本 acc loss可视化 查看训练效果 编写一个应用程序 神经网络接口 给图识物 当你有了本领域的数据集 又有了标签 你怎么
  • cron计划任务每隔30秒执行一次

  • 【Inno Setup】判别系统版本

    Code function IsXP32 Boolean var Version TWindowsVersion S String begin GetWindowsVersionEx Version S 主版本号 IntToStr Vers
  • python文本进度条练习之不同速度进度条

    这属于一个小小的课后练习 但我在网上没有找到对应代码 我主要是在textprobarv3 py上做修改 我选择的是power设计 f x pow x 1 x 0 03 2 主要增加了一行 fx int pow i 1 i 0 03 2 修改
  • 线程池 vs 信号量的优缺点比较

    通常我们都采用基于线程池的实现方式 这也是最容易理解的方案 Hystrix还提供了另一种底层实现 那就是信号量隔离 小时候我们就知道 红灯停 绿灯行 跟着交通信号的指示过马路 信号量也是这么一种放行 禁行的开关作用 它和线程池技术一样 控制
  • 目标检测识别中,mAP,AP,P值的定义与计算

    mAP是衡量模型在所有类别上的准确率 是衡量模型的好坏的评价指标 mAP 所有类别的AP之和 类别数 AP是某一个类别的准确率 AP 每张图片的P之和 图片数量 P 一张图片上某一类别识别的正确数量 一张图片上某一类别的总数量 比如现在有三
  • drwxr-x-w-. 4 507 509 4.0K 9月 4 2018 wukong linux中 507和509 是什么回事?

    第一个数字507出现原因 表示该目录的所有者 不存在了 第二个数字509出现原因 表示该目录的所有者所在的组 不存在了
  • 【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列)

    背景需求 工会老师求助 如何在word里面插入4 8的框 我怎么也拉不到4 8大小 她用的是我WORD 文本框 我一听 这又是要手动反复黏贴 文本框 照片 文字 的节奏哦 我问 你要做几个人 超过20个 我写个程序批量插图 写代码测试要费时