【办公类-38-01】20240305 班级微信优质指导交流(word单元格插入统一大小的微信截图,替换方式修改基本信息)

作品展示

95378c4c01a54d8797757137ba59ad6e.png

 

背景需求:

2024年3月5日,搭档指着她的笔记本电脑里面的一个docx页面(有2*2表格)

“你写的那个编程可不可以直接在里面插图片?”

她是工会成员,经常要开展工会活动,并拍照,写通讯,制作包含活动照片的word文本材料。

“拍的照片插入后不见了,要选择选择四周环绕才能出现,而且有些照片尺寸很大,还要调整照片大小”

我瞬间理解她的需求——手动在word里插入图片会遇到调整尺寸、设置图片占位的问题。

“今天就4张图片插进去,我自己做做很快的,如果你有好办法,我就不用改尺寸了!”

“可以做的,我写个代码。你下次用用看。”

思考:

她的需求让我想到了每学期结束时要提交的一份家教资料——《XX班微信及优质指导交流》

ee482c95f3bf45fb96e382d6dfc77885.png

731ecff25b1c47cebe0f19019ebd5e7f.png

存在问题,

在一个docx页面的段落里面,直接插入8张(2张一行)的微信竖版截图,多张图片位置非常容易互相影响而反复移动。不能形成矩阵样式

解决思路:

插入表格,控制图片的占位,把边框隐藏

0c4b7f08b44145f1ac24337828150945.png

5226a025338d4422b364862f2f7f6058.png

7c3843d2449b425cbfee4e33767be781.png

存在问题:

虽然有了表格单元格框住,图片不会移动了,但是手动插入图片后,图片依旧会“看不见”

——手动插入的图片是嵌入型,只能看见最下面一点点图片,

——手动插入图片长宽更大,并非单元格设置的大小

4ecad8cd9f544538a25b15ee4386bd86.png

02f95cc9a6fa4c079aac5a61261aa86f.png

ffa60e77eab7460bb0ec4f186722954d.png

遗留问题:

痛苦的是,每张手动插入的图片,每张都要分别选择右上角的图片样式按钮-四周环绕。因而8张图片反复插入修改,也是非常烦的时候。

现状:

好在6个月才做一份记录,班主任手动插图也不辛苦。

我的思考:

我作为一位信息员,在掌握了Python在word表格插入图片方法后,哪怕只是一份8张图的word表,我肯定也希望能用代码来快速将图片插入word。

 

设计过程

素材准备:

e9c0085b75174ab1a4852c7e835e3cc2.png

word模板

aa4f396d6d0247b185ddc1c04af19964.png

c1128decfbad430299c0daa747a9850d.png

微信截图的大小(华为手机的微信截屏大小)——1080*2400.

用程序做8张微信截图大小的彩色图片

'''
目的:制作纯色图 红橙黄绿青蓝紫)模仿8张微信截图
作者:阿夏
时间:2023年3月5日12:07
'''

import numpy as np
import matplotlib.pyplot as plt
import skimage.io as io
from PIL import Image

color=[(255,0, 0),(255, 165, 0),(255, 255, 0),(0, 255, 0),(0, 255, 255),(0, 0, 255),(255, 0, 255),(0, 0, 0)]
 

# 设置图像大小
width = 1080    
height = 2400
# color = (255, 0, 0) # RGB格式表示红色
 
for i in range(len(color)):
# 创建空白图像对象并填充背景色
    img = Image.new('RGB', (width, height), color=color[i]) 
    img.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\中X班微信优质指导交流\jpg\{}.jpg".format('%02d'%i))

jpg文件夹有8张微信截图(用色块替代)

4d6baeba9a9d4de7a10e1139c2ad2cea.png

 

 

代码设计:

前期我有过提取docx文件的单元格坐标,插入图片的代码,但是这一次我想用AI对话大师写个新的,看看是否能更简短一点。

【教学类-32-04】20231013十二生肖4.0(标记+1位数字+排序+左右分类)(大班:《我是中国人》偏科学-数)-CSDN博客文章浏览阅读86次。【教学类-32-04】20231013十二生肖4.0(标记+1位数字+排序+左右分类)(大班:《我是中国人》偏科学-数)https://blog.csdn.net/reasonsummer/article/details/133807867

以下是多次测试后重新补充的关键词

a3519e0fbab14aa49d159b10ed278957.png

3f7b7a0ae64d4828aa97e6e4806e0ac1.png1ddd41c971f9472297e5cf2235f8c609.png

11ae46a465304d1caba845d7673f5a15.png

'''
微信优质家教指导(一页)8图
作者:阿夏
时间:2024年3月4日
'''

from docx import Document
from docx.shared import Inches,Cm
from PIL import Image
import os
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT


# 打开Word文档
doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\中X班微信优质指导交流\中X班微信优质指导交流.docx')
# 获取jpg文件夹中的所有图片文件
image_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\中X班微信优质指导交流\jpg'
image_files = os.listdir(image_folder)

# 遍历每个表格单元格和对应的图片文件
#  遍历每个表格单元格和对应的图片文件
table = doc.tables[0]  # 假设要操作的表格是第一个表格
cell_index = 0
for row in table.rows:
    for cell in row.cells:
        if cell_index >= len(image_files):
            break
        
        # 打开并调整图片大小
        image_file = os.path.join(image_folder, image_files[cell_index])
        image = Image.open(image_file)
        image.thumbnail(( Cm(6),Cm(10.5)))  # 调整图片大小为4x4厘米
        # image.thumbnail((Inches(2), Inches(2)))  # 调整图片大小为2x2英寸
        # 清空单元格中的段落
        for paragraph in cell.paragraphs:
            cell._element.remove(paragraph._element)  

        # 清空单元格中的内容
        for paragraph in cell.paragraphs:
            for run in paragraph.runs:
                run.text = ""

        # 将图片插入到单元格中
        # cell.add_paragraph().add_run().add_picture(image_file, width=Inches(2), height=Inches(2))
        # cell.add_paragraph().add_run().add_picture(image_file, width=Cm(6),height=Cm(10.5))

        # 插入图片到单元格中 并居中
        paragraph = cell.add_paragraph()
        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        run = paragraph.add_run()
        run.add_picture(image_file, width=Cm(6), height=Cm(11.5))
        
        cell_index += 1
    

#     # 保存修改后的Word文档
doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\中X班微信优质指导交流\中4班微信优质指导交流(插图).docx')

d3158473f09c431f8c7e881be55ee871.png

 

c5a4bbc37aa8418bac6c73d11624ffba.png

4d6baeba9a9d4de7a10e1139c2ad2cea.png

按照第坐标00、01、10、11、20、21、30、31的方式插入从“红”到”黑”的八张图。

 

图片插入正确,需要优化:

1、不要看到黑色边框、

2、上下图片黏连

1eb4a4ce156246468fc769a452c9af08.png

处理方式,

在模板里面把边框改成透明

4d46053be7404a84b384e2c6c01cbc3f.png

把图片高度改小一点

bebab6a0d1e14046952053af9df0e550.png

 

34e37880964b4ee0b82e56bc7d920ed3.png

 

附加需求——班级、班主任、时间

由于制作这份文本时,会使用以前的模板,

有时候我会插好8张图片后,忘记更改班级、班主任、时间,导致重复打印多张修改。

200598f45eb041f1bce961a3653b1b45.png

 

8888ed880d16457890f083a7c219297d.png

所以我想让程序自动替换掉这些基础信息。

由于只有那么一份要改,不想用EXCEL和Word{{}}的方法。

 

第一个思路:在第1行第1个字符插入“大”,反复询问测试后都无法成功。

5c1132ceb8fe4c3489ad0da5e6b7467b.png

9da98412f0544ae586e01a211e22ed26.png

5b7593cf280a4c44ad589f0307d1ae02.png

 

第二个思路:“Word文本替换”的方法

c44c7f31434044569d40273130f58707.png

e0d907e56e9642d4bdb364b557a00894.png

a0aa6a663ca745ce8b18edc602afbdc3.png

cba6595441ee4621b656a62f9e9431e3.png

33080f0af80049afbf5668daf10b1322.png

5edc29992db846e19713e0b76dc394aa.png

7a4888f1072f400faf462a672b46810f.png

2bc51ec4c5bd4f1abab63c3687cdbab8.png

替换代码解析

44f3c85d8c12467bb0fb131287c6fafc.png

合并整体代码

'''
微信优质家教指导(一页)自动插入8张截图、替换班级、教师名字、时间
作者:阿夏
时间:2024年3月4日
'''

from docx import Document
from docx.shared import Inches,Cm
from PIL import Image
import os
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT


# 打开Word文档
doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\中X班微信优质指导交流\中X班微信优质指导交流.docx')
# 获取jpg文件夹中的所有图片文件
image_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\中X班微信优质指导交流\jpg'
image_files = os.listdir(image_folder)

# 遍历每个表格单元格和对应的图片文件
#  遍历每个表格单元格和对应的图片文件
table = doc.tables[0]  # 假设要操作的表格是第一个表格
cell_index = 0
for row in table.rows:
    for cell in row.cells:
        if cell_index >= len(image_files):
            break
        
        # 打开并调整图片大小
        image_file = os.path.join(image_folder, image_files[cell_index])
        image = Image.open(image_file)
        image.thumbnail(( Cm(6),Cm(10.5)))  # 调整图片大小为4x4厘米
        # image.thumbnail((Inches(2), Inches(2)))  # 调整图片大小为2x2英寸
        # 清空单元格中的段落
        for paragraph in cell.paragraphs:
            cell._element.remove(paragraph._element)  

        # 清空单元格中的内容
        for paragraph in cell.paragraphs:
            for run in paragraph.runs:
                run.text = ""

        # 将图片插入到单元格中
        # cell.add_paragraph().add_run().add_picture(image_file, width=Inches(2), height=Inches(2))
        # cell.add_paragraph().add_run().add_picture(image_file, width=Cm(6),height=Cm(11.7))

        # 插入图片到单元格中 并居中
        paragraph = cell.add_paragraph()
        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        run = paragraph.add_run()
        run.add_picture(image_file, width=Cm(6), height=Cm(10.5))
        
        cell_index += 1
    

#     # 保存修改后的Word文档
# doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\中X班微信优质指导交流\中4班微信优质指导交流(插图).docx')

# 班级、教师、时间的文字替换
original=['X','Y','A','B','T']
new=['中','4','张三','李四光','2024.6.20']
# 遍历所有段落

for i in range(len(original)):
    for paragraph in doc.paragraphs:
        # 遍历段落中的每个运行对象
        for run in paragraph.runs:
            # 替换运行对象中的文本
            a="{}".format(original[i])
            b="{}".format(new[i])

            if "{}".format(a) in run.text:
                new_text = run.text.replace("{}".format(a) ,"{}".format(b))
        
                # 清空原有运行对象的内容
                run.text = ""
                
                # 添加替换后的文本,并保留原有格式
                new_run = run
                new_run.text = new_text
            

    # 保存修改后的Word文档
doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\中X班微信优质指导交流\{}{}班微信优质指导交流({}).docx'.format(new[0],new[1],new[4]))

最终结果

5b146715004644c0bab1f94850301e73.png95378c4c01a54d8797757137ba59ad6e.png

替换了基本信息,保留原来的格式,字号、字体——

db0be081e2c54de093389e478e6cbb32.png

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx配置文件的整体结构

一、Nginx配置文件的整体结构 从图中可以看出主要包含以下几大部分内容: 1. 全局块 该部分配置主要影响Nginx全局,通常包括下面几个部分: 配置运行Nginx服务器用户(组) worker process数 Nginx进程PID存放路径 错误…

【笔记】ArkTS 语言(OpenHarmony系统)

一、官方简介和文档 介绍:aArkTS 语言 | 华为开发者联盟 (huawei.com) 学习指南(文档):初识ArkTS语言-学习ArkTS语言-入门 | 华为开发者联盟 (huawei.com) 二、ArkTS语言知识 (一)编程语言介绍 Mozilla创…

基于php+mysql的高校共享单车管理系统springoot+vue_java

高校共享单车管理系统在让高校单车租赁信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升高校共享单车管理系统提供的数据的可靠性,让系统数据的错误率降至最低。 …

微信小程序开发系列(十七)·事件传参·mark-自定义数据

目录 步骤一:按钮的创建 步骤二:按钮属性配置 步骤三:添加点击事件 步骤四:参数传递 步骤五:打印数据 步骤六:获取数据 步骤七:父进程验证 总结:data-*自定义数据和mark-自定…

代码训练LeetCode(2)区间列表的交集

代码训练(2)LeetCode之区间列表的交集 Author: Once Day Date: 2024年3月5日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 986. 区间列表的交集 - 力扣(LeetCode)力扣 (LeetCode) 全球…

推荐一款素材资源下载神器 —— 有图下载器

​ 最近由于学习工作需要,得从小红薯上搬运一些学习视频,一直找不到一个好用的视频搬运软件,朋友向我介绍推荐了一款工具叫作有图视频下载器,试了试感觉这款软件真的非常好用,所以推荐给大家! 一、支持提…

定时执行专家的主要功能和使用场景

定时执行专家是一款功能强大且实用的定时任务软件。它具有以下优点: 功能丰富: 支持多种定时模式、多种任务类型、丰富的触发方式、强大的日志功能等。易于使用: 操作界面简洁直观,易于上手。稳定可靠: 运行稳定可靠,可长期使用。 具体来说&…

flutter框架优缺点,最新Android大厂高频面试题

部分面试常问的面试专题 一、Java篇 1.多线程并发; sleep 和 wait 区别join 的用法线程同步:synchronized 关键字等线程通信线程池手写死锁 2.Java 中的引用方式,及各自的使用场景 3.HashMap 的源码 4.GC(垃圾回收)是什么?如何…

uniapp 手写 简易 时间轴 组件

一、案例如图 该案例设计条件: 左侧时间 和竖线、点、内容都是居中对其的,上下时间点中间要有一段距离 二、编写逻辑 1. 布局结构:一共三个元素,左侧是时间和黑点,中间是线条,右侧是内容 2. 样式难点&#…

第五篇:人工智能与机器学习技术VS创意创新(creative)--- 我为什么要翻译介绍美国人工智能科技巨头IAB公司?

【如无特殊说明,本文所有图片均来源于网络】 IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau&…

(学习日记)2024.03.05:UCOSIII第七节:SysTick+任务时间片

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

java-ssm-jsp-大学社团管理系统

java-ssm-jsp-大学社团管理系统 获取源码——》公主号:计算机专业毕设大全

pyg-创建消息传递网络

创建消息传递网络 — pytorch_geometric 文档 (pytorch-geometric.readthedocs.io) https://arxiv.org/abs/1801.07829 import torch from torch.nn import Sequential as Seq, Linear, ReLU from torch_geometric.nn import MessagePassing class EdgeConv(MessagePassing): …

Cloud-Sleuth分布式链路追踪(服务跟踪)

简介 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败 GitHub - spring-cloud/spring-cloud-sl…

Java基础 - 8 - 算法、正则表达式

一. 算法 什么是算法? 解决某个实际问题的过程和方法 学习算法的技巧? 先搞清楚算法的流程,再直接去推敲如何写算法 1.1 排序算法 1.1.1 冒泡排序 每次从数组中找出最大值放在数组的后面去 public class demo {public static void main(S…

分析开源机器学习框架TensorFlow

TensorFlow是一个开源的机器学习框架,由Google开发和维护。它提供了一个灵活的编程环境,可用于构建和训练各种机器学习模型。TensorFlow的基本概念和使用场景如下: 张量(Tensor):在TensorFlow中&#xff0c…

微信小程序开发系列(十六)·事件传参·data-*自定义数据

事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参。 在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在事件处理函数中获取这些自定义数据,从而完成业务逻辑的开发。 在组件上通过data-"的方式定义需要传递的数据,其…

大屏 超宽屏自适应最优解决方案(transform:scale)

问题引入: 可视化数据大屏需要适配各种大屏尺寸 1080P:1920*1080 2K:2560*1440 左右 4K:3840*2160 左右 8K:7680*4320 左右 ① 大屏使用rem 耗时 而且对浏览器最小字体不支持, ② 使用transform:scale可以…

【unity】shader优化总结-转载

分为三个部分:Unity官方文档,GDC,个人经验。 Unity Manual 1.计算量优化。着色器进行的计算和处理越多,对性能的影响越大。针对不影响最终效果但依然进行计算的无效代码,进行移除操作。计算的频率也会影响游戏的性能…

《操作系统真相还原》读书笔记四:安装nasm

下载链接:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/ 下载-解压-安装 tar zxvf nasm-2.13.03.tar.gz ./configure --prefix/home/truthos/nasm/toolchain/make && makeinstall执行make install export PATH/home/truthos/nasm/toolchain/bin:…