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

本文讲述了如何使用Python脚本在Word文档中自动化插入微信截图,并解决图片位置调整和边框问题,同时实现班级、班主任和时间等基础信息的自动替换,提升工作效率。
摘要由CSDN通过智能技术生成

作品展示

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值