用python实战excel和word自动化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

python实现excel和word自动化--批量处理

  • 前言--需求
    • 快要期末了需要,提交一个年级的学生成绩数据,也就是几百份。当前我们收集了一份excel表格,它里面有学生的班级、姓名、成绩等信息。
    • 问题1: 每个学生一个docx要 有不同的文件名,要把文件名为 班级+姓名 (图片未改)
    • 问题2: 每个docx文件中 需要填写一些不一样的东西 比如 文件里要填写
  • 二、答案来了,艾佛森来了。于是我编写程序运行后就解决了这个问题:生成了全年级的成绩,并且文件名也按照excel表格的内容有序命名,然后文件里的班级姓名也自动更改成功
    • 1.首先复制了需要的份数 -- 就是拿到一个docx样本,然后进行批量复制,文件名可以相同,这里没有出来,只是让他复制和execl表格一样的份数。
    • 2.读入数据:就是去读xlsx中的数据,代码我已经详细加了注释。这里需要注意xlrd==1.2.0 ,下载这个版本的,然后运行的时候还有一个地方要稍微改下代码,网上搜索一下即可。这里有个函数就是operator_docx,我放到后面讲解。这段代码的意思就是从xlsx取相应的几列数据(我们要的),给生成一个特定的文件名,然后拼接好,将旧的文件名改为新的。同时调用operator_docx()函数,把文件里的内容也替换掉。
    • 3.operator_docx():是我自己写的一个函数,然后这里有很多注释,代表打开docx文件,然后可以小时docx的段落以及表格。可以帮助我去定位想要的修改的内容,我就是这样精准的找到了,想要替换的内容。因为传进来的参数刚好是要修改的,所有此函数我放在了rename_from_excel()中调用,减少了一定的计算开销,提升了性能。
  • 二、完整代码如下
    • 1.完整代码:
    • 2.运行结果:而且里面的内容也已经全部正确,就是班级和姓名 和文件名一一对应。
  • 总结-- 有些操作可以放这里,大家可以更好的根据自己的需求,去出来自己的docx,然后批量生成。
  • 1. 打开docx,查看内容
  • 2. 打开docx后,如何修改我想要修改的那部分内容呢??
  • 3. 打开xlsx,如何获取想要的数据??
  • 4. 写在最后:主要我也最近着急交一份数据,然后有感而发,写的这份代码,希望可以对大家有所作用,我觉得python真的是一个很好用的工具,前几天也用它登录12306抢票成功了呢,大家可以去我的主页看看。我想继续学下去,每天进步一点点!重剑无锋,大巧不工。


前言–需求

提示:这里可以添加本文要记录的大概内容:

快要期末了需要,提交一个年级的学生成绩数据,也就是几百份。当前我们收集了一份excel表格,它里面有学生的班级、姓名、成绩等信息。

在这里插入图片描述

问题1: 每个学生一个docx要 有不同的文件名,要把文件名为 班级+姓名 (图片未改)

在这里插入图片描述

问题2: 每个docx文件中 需要填写一些不一样的东西 比如 文件里要填写

在这里插入图片描述

二、答案来了,艾佛森来了。于是我编写程序运行后就解决了这个问题:生成了全年级的成绩,并且文件名也按照excel表格的内容有序命名,然后文件里的班级姓名也自动更改成功

1.首先复制了需要的份数 – 就是拿到一个docx样本,然后进行批量复制,文件名可以相同,这里没有出来,只是让他复制和execl表格一样的份数。

def copy_files(original_file, num_copies):# 获取原始文件的目录和文件名(不包括扩展名)directory, file_base = os.path.split(original_file)file_name, file_ext = os.path.splitext(file_base)for i in range(1, num_copies + 1):# 构建新文件名new_file_name = f"{file_name}_copy{i}{file_ext}"new_file_path = os.path.join(directory, new_file_name)# 复制文件shutil.copy2(original_file, new_file_path)print(f"Copied to {new_file_path}")if __name__ == "__main__":# 指定要复制的文件路径original_file_path = "E:\要交的赶紧搞\过程性评价表\G201-XXX.docx"number_of_copies = 304

2.读入数据:就是去读xlsx中的数据,代码我已经详细加了注释。这里需要注意xlrd==1.2.0 ,下载这个版本的,然后运行的时候还有一个地方要稍微改下代码,网上搜索一下即可。这里有个函数就是operator_docx,我放到后面讲解。这段代码的意思就是从xlsx取相应的几列数据(我们要的),给生成一个特定的文件名,然后拼接好,将旧的文件名改为新的。同时调用operator_docx()函数,把文件里的内容也替换掉。

def rename_from_excel():"""根据excel表格的内容批量修改文件名"""# excel表格所在的位置excel_path = r"E:\要交的赶紧搞\11过程性评价成绩--信.xlsx"# 读取excel表:批量处理测试.xlsxxlsx1 = xlrd.open_workbook(excel_path)# 读取表格里第一个sheet(工作簿)sheet = xlsx1.sheet_by_index(0)# 获取表格第二列数据 -- 班级class_list = list(sheet.col_values(1))# 获取表格第四列数据 -- 姓名name_list = list(sheet.col_values(3))print(class_list)print(name_list)# 获取该文件夹下所有的文件(包括文件夹)original_file_path = "E:\要交的赶紧搞\过程性评价表"i = 0file_names = os.listdir(original_file_path)for file_name in file_names:original_rename = os.path.join(original_file_path, file_name)  # 获取所有文件的路径directory, file_base = os.path.split(original_file_path)file_name, file_ext = os.path.splitext(file_base)print('original_rename',original_rename)print('directory',directory)print('file_base',file_base)print('file_name',file_name)print('file_ext',file_ext)file_name = class_list[i] + '-' + name_list[i] + '-信息技术过程性评价成绩第3学期.docx'new_file_path = os.path.join(original_file_path, file_name+file_ext)print('new_file_path',new_file_path)os.rename(original_rename, new_file_path)operator_docx(new_file_path, class_list[i], name_list[i])i = i + 1

3.operator_docx():是我自己写的一个函数,然后这里有很多注释,代表打开docx文件,然后可以小时docx的段落以及表格。可以帮助我去定位想要的修改的内容,我就是这样精准的找到了,想要替换的内容。因为传进来的参数刚好是要修改的,所有此函数我放在了rename_from_excel()中调用,减少了一定的计算开销,提升了性能。

def operator_docx(file_path,class_name, all_name):"""自动化操作--docx"""# 打开一个现有的Document对象doc = Document(f'{file_path}')# paras = list(doc.paragraphs)# print('==============')# 遍历所有段落并打印其内容# for para in doc.paragraphs:#     print(para.text)# print(doc.paragraphs[3].text)doc.paragraphs[3].text = f'学校:XXX中学 班级:{class_name}   学生姓名:{all_name}  第 3学期/模块'doc.save(f'{file_path}')#     print(type(para))# print(type(paras))# print('===========================')# 遍历所有表格并打印其内容 -- 你可以去看看里面的内容# for table in doc.tables:#     for row in table.rows:#         for cell in row.cells:#             print(cell.text, end='\t')#         print()

二、完整代码如下

1.完整代码:

import os
import shutil
import xlrd
from docx import Document
import pandasdef copy_files(original_file, num_copies):# 获取原始文件的目录和文件名(不包括扩展名)directory, file_base = os.path.split(original_file)file_name, file_ext = os.path.splitext(file_base)for i in range(1, num_copies + 1):# 构建新文件名new_file_name = f"{file_name}_copy{i}{file_ext}"new_file_path = os.path.join(directory, new_file_name)# 复制文件shutil.copy2(original_file, new_file_path)print(f"Copied to {new_file_path}")def rename_from_excel():"""根据excel表格的内容批量修改文件名"""# excel表格所在的位置excel_path = r"E:\要交的赶紧搞\11过程性评价成绩--信.xlsx"# 读取excel表:批量处理测试.xlsxxlsx1 = xlrd.open_workbook(excel_path)# 读取表格里第一个sheet(工作簿)sheet = xlsx1.sheet_by_index(0)# 获取表格第二列数据 -- 班级class_list = list(sheet.col_values(1))# 获取表格第四列数据 -- 姓名name_list = list(sheet.col_values(3))print(class_list)print(name_list)# 获取该文件夹下所有的文件(包括文件夹)original_file_path = "E:\要交的赶紧搞\过程性评价表"i = 0file_names = os.listdir(original_file_path)for file_name in file_names:original_rename = os.path.join(original_file_path, file_name)  # 获取所有文件的路径directory, file_base = os.path.split(original_file_path)file_name, file_ext = os.path.splitext(file_base)print('original_rename',original_rename)print('directory',directory)print('file_base',file_base)print('file_name',file_name)print('file_ext',file_ext)file_name = class_list[i] + '-' + name_list[i] + '-信息技术过程性评价成绩第3学期.docx'new_file_path = os.path.join(original_file_path, file_name+file_ext)print('new_file_path',new_file_path)os.rename(original_rename, new_file_path)operator_docx(new_file_path, class_list[i], name_list[i])i = i + 1
def operator_docx(file_path,class_name, all_name):"""自动化操作--docx"""# 打开一个现有的Document对象doc = Document(f'{file_path}')# paras = list(doc.paragraphs)# print('==============')# 遍历所有段落并打印其内容# for para in doc.paragraphs:#     print(para.text)# print(doc.paragraphs[3].text)doc.paragraphs[3].text = f'学校:深圳市红岭教育集团大鹏华侨中学 班级:{class_name}   学生姓名:{all_name}  第 3学期/模块'doc.save(f'{file_path}')#     print(type(para))# print(type(paras))# print('===========================')# 遍历所有表格并打印其内容 -- 你可以去看看里面的内容# for table in doc.tables:#     for row in table.rows:#         for cell in row.cells:#             print(cell.text, end='\t')#         print()if __name__ == "__main__":# 指定要复制的文件路径original_file_path = "E:\要交的赶紧搞\过程性评价表\G201-蔡承君.docx"number_of_copies = 304# 1.批量复制文件copy_files(original_file_path, number_of_copies)# 2.用excel的行名得到想要的文件名 --> 自动化操作函数operator_docxrename_from_excel()

2.运行结果:而且里面的内容也已经全部正确,就是班级和姓名 和文件名一一对应。

在这里插入图片描述


总结-- 有些操作可以放这里,大家可以更好的根据自己的需求,去出来自己的docx,然后批量生成。

1. 打开docx,查看内容

from docx import Document# 打开一个现有的Document对象
doc = Document('demo.docx')# 遍历所有段落并打印其内容
for para in doc.paragraphs:print(para.text)# 遍历所有表格并打印其内容
for table in doc.tables:for row in table.rows:for cell in row.cells:print(cell.text, end='\t')print()

2. 打开docx后,如何修改我想要修改的那部分内容呢??

# 假设我们要修改第2个段落的内容
target_paragraph_index = 1  # 注意索引从0开始,所以第2个段落的索引是1# 确保文档中有足够的段落
if len(doc.paragraphs) > target_paragraph_index:# 修改第2个段落的内容doc.paragraphs[target_paragraph_index].text = '这是新的段落内容。'# 保存修改后的文档
doc.save('modified_by_index_example.docx')

3. 打开xlsx,如何获取想要的数据??

    # excel表格所在的位置excel_path = r"E:\要交的赶紧搞\11过程性评价成绩--信.xlsx"# 读取excel表:批量处理测试.xlsxxlsx1 = xlrd.open_workbook(excel_path)# 读取表格里第一个sheet(工作簿)sheet = xlsx1.sheet_by_index(0)# 获取表格第二列数据 -- 班级class_list = list(sheet.col_values(1))# 获取表格第四列数据 -- 姓名name_list = list(sheet.col_values(3))print(class_list)print(name_list)# 获取该文件夹下所有的文件(包括文件夹)original_file_path = "E:\要交的赶紧搞\过程性评价表"

4. 写在最后:主要我也最近着急交一份数据,然后有感而发,写的这份代码,希望可以对大家有所作用,我觉得python真的是一个很好用的工具,前几天也用它登录12306抢票成功了呢,大家可以去我的主页看看。我想继续学下去,每天进步一点点!重剑无锋,大巧不工。

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

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

相关文章

【R安装】R语言的详细安装及环境配置(2024年11月)

目录 R及Rstudio下载R下载Rstudio下载 R及Rstudio安装R安装Rtools 安装Rstudio安装 运行 RStudio通过RStudio配置使用特定的R版本 参考 R及Rstudio下载 R下载 R官网-The R Project for Statistical Computing 点击【download R】,进入下载界面: 选择…

Docker官网安装

1.官网 官方文档 https://www.docker.com/ Docker Hub官网 镜像 https://hub.docker.com/ 2.Docker 的三要素 1、镜像 2、容器 3、仓库 小总结 3.Docker 平台架构图 (架构版本) 4.安装Docker CentOS | Docker Docs 1.确定你是CentOS7及以上版本 …

寒假第一次牛客周赛 Round 76回顾

AC数&#xff1a;2&#xff08;A、C&#xff09; B 思路&#xff1a; 等价于求&#xff1a; 数量最多的字符 #include<stdio.h> int main() {int n,num;int a[26]{0};//用于存储字母 a 到 z 的出现次数。scanf("%d",&n);char s[n];scanf("%s",s)…

GARCH指导的神经网络在金融市场波动性预测中的应用

“GARCH-Informed Neural Networks for Volatility Prediction in Financial Markets” 论文地址&#xff1a;https://arxiv.org/pdf/2410.00288v1 摘要 波动性作为衡量风险的关键指标&#xff0c;广泛应用于金融投资的定价中。GARCH模型及其变体是用于股票波动性预测的传统工…

STM32-笔记43-低功耗

一、什么是低功耗&#xff1f; 低功耗‌是指通过优化设计和采用特定的技术手段&#xff0c;降低电子设备在运行过程中消耗的能量&#xff0c;从而延长电池寿命、提高性能和减少发热。低功耗设计主要从芯片设计和系统设计两个方面进行&#xff0c;旨在减少所有器件的功率损耗&am…

Docker 镜像制作原理 做一个自己的docker镜像

一.手动制作镜像 启动容器进入容器定制基于容器生成镜像 1.启动容器 启动容器之前我们首先要有一个镜像&#xff0c;这个镜像可以是从docker拉取&#xff0c;例如&#xff1a;现在pull一个ubuntu镜像到本机。 docker pull ubuntu:22.04 我们接下来可以基于这个容器进行容器…

辅助云运维

为客户提供运维支持&#xff0c;保障业务连续性。 文章目录 一、服务范围二、服务内容三、服务流程四、 服务交付件五、责任分工六、 完成标志 一、服务范围 覆盖范围 云产品使用咨询、问题处理、配置指导等&#xff1b; 云产品相关操作的技术指导&#xff1b; 云相关资源日常…

Vue3使用vue-count-to数字滚动模块报错解决方案

小伙伴们是不是遇到了vue3项目使用vue-count-to出现报错的问题 报错如下&#xff1a; TypeError: Cannot read properties of undefined (reading _c) 这个错误信息具体是说没读取到_c的属性 具体不清楚是什么原因&#xff0c;排查还得去看源码&#xff0c;所以我们来解决&a…

一分钟学习数据安全——数据安全的核心概念CIA以及安当解决方案

数据安全三要素是指保密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integrity&#xff09;和可用性&#xff08;Availability&#xff09;&#xff0c;它们是信息安全领域的核心概念&#xff0c;旨在确保信息的安全和可信度。这边文章用一分钟的时间&#…

1️⃣Java中的集合体系学习汇总(List/Map/Set 详解)

目录 01. Java中的集合体系 02. 单列集合体系​ 1. Collection系列集合的遍历方式 &#xff08;1&#xff09;迭代器遍历&#xff08;2&#xff09;增强for遍历​编辑&#xff08;3&#xff09;Lambda表达式遍历 03.List集合详解 04.Set集合详解 05.总结 Collection系列…

事件监听,事件类型

点击按钮实现 盒子关闭 随机点名案例 先给开始按钮添加点击事件 获取显示名字的 div 和 开始按钮的 div给开始按钮添加点击事件&#xff0c;设置定时器&#xff0c;每隔35ms内获取一个数组长度内的随机数&#xff0c;将显示名字的 div内的内容替换为该随机数作为下标的数组的内…

基于PyQt - 6的医疗多模态大模型医疗研究系统中的创新构建与应用(上 .文章部分)

一、引言 1.1 研究背景与意义 在当今数智化时代,医疗行业正经历着深刻的变革,对智能化、高效化的需求日益迫切。传统的医疗模式在面对海量的医疗数据、复杂的诊断流程以及个性化的治疗需求时,逐渐显露出局限性。随着人工智能技术的飞速发展,多模态大模型作为一种前沿技术…

微软震撼发布:Phi-4语言模型登陆Hugging Face

近日&#xff0c;微软公司在Hugging Face平台上正式发布了其最新的语言模型Phi-4&#xff0c;这一发布标志着人工智能技术的又一重要进步。Phi-4模型以其140亿参数的高效配置&#xff0c;在复杂推理任务中表现出色&#xff0c;特别是在数学领域&#xff0c;更是展现出了卓越的能…

深度解析Linux中关于操作系统的知识点

操作系统概述与核心概念 任何计算机系统都包含一个基本的程序集合&#xff0c;成为操作系统OS 操作系统是一款进行软硬件管理的软件 操作系统包括&#xff1a; 内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;驱动管理&#xff09; 其他程序&#xff08;例如数据…

IEC103 转 ModbusTCP 网关

一、产品概述 IEC103 转 ModbusTCP 网关型号 SG-TCP-IEC103 &#xff0c;是三格电子推出的工业级网关&#xff08;以下简 称网关&#xff09;&#xff0c;主要用于 IEC103 数据采集、 DLT645-1997/2007 数据采集&#xff0c; IEC103 支持遥测和遥 信&#xff0c;可接…

如何监控和防范小红书笔记详情API的安全风险?

流量监控与异常检测 请求频率监测&#xff1a; 建立一个系统来记录 API 的请求频率。可以通过在服务器端设置计数器或者使用专业的监控工具来实现。例如&#xff0c;对于每个 API 调用者&#xff08;可以通过 API 密钥或者用户标识来区分&#xff09;&#xff0c;记录它们在单…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…

迅翼SwiftWing | ROS 固定翼开源仿真平台正式发布!

经过前期内测调试&#xff0c;ROS固定翼开源仿真平台今日正式上线&#xff01;现平台除适配PX4ROS环境外&#xff0c;也已实现APROS环境下的单机飞行控制仿真适配。欢迎大家通过文末链接查看项目地址以及具体使用手册。 1 平台简介 ROS固定翼仿真平台旨在实现固定翼无人机决策…

【计算机网络】深入浅出计算机网络

第一章 计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成一种重要的信息服务基础设施 CNNIC 中国互联网网络信息中心 因特网概述 网络、互联网和因特网 网络&#xff08;Network&#xff09;由若干结点&#xff08;Node&#xff09;和连接这些结点的链路…

QT Quick QML 实例之椭圆投影,旋转

文章目录 一、前言二、演示三、部分代码与分析 QML 其它文章请点击这里: QT QUICK QML 学习笔记 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 一、前言 此 Demo 主要用于无人机吊舱视角的模拟&#xf…