用python实战excel和word自动化

news/2025/2/13 5:15:13/

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

python实现excelword自动化--批量处理

  • 前言--需求
    • 快要期末了需要,提交一个年级的学生成绩数据,也就是几百份。当前我们收集了一份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_9">快要期末了需要,提交一个年级的学生成绩数据,也就是几百份。当前我们收集了一份excel表格,它里面有学生的班级、姓名、成绩等信息。

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

python">word">def copy_files(original_file, num_copies):# 获取原始文件的目录和文件名(不包括扩展名)directory, file_base = os.path.split(original_file)file_name, file_ext = os.path.splitext(file_base)word">for i word">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)word">print(f"Copied to {new_file_path}")word">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()函数,把文件里的内容也替换掉。

python">word">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))word">print(class_list)word">print(name_list)# 获取该文件夹下所有的文件(包括文件夹)original_file_path = "E:\要交的赶紧搞\过程性评价表"i = 0file_names = os.listdir(original_file_path)word">for file_name word">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)word">print('original_rename',original_rename)word">print('directory',directory)word">print('file_base',file_base)word">print('file_name',file_name)word">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)word">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

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

python">word">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()

二、完整代码如下

1.完整代码:

python">word">import os
word">import shutil
word">import xlrd
word">from docx word">import Document
word">import pandasword">def copy_files(original_file, num_copies):# 获取原始文件的目录和文件名(不包括扩展名)directory, file_base = os.path.split(original_file)file_name, file_ext = os.path.splitext(file_base)word">for i word">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)word">print(f"Copied to {new_file_path}")word">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))word">print(class_list)word">print(name_list)# 获取该文件夹下所有的文件(包括文件夹)original_file_path = "E:\要交的赶紧搞\过程性评价表"i = 0file_names = os.listdir(original_file_path)word">for file_name word">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)word">print('original_rename',original_rename)word">print('directory',directory)word">print('file_base',file_base)word">print('file_name',file_name)word">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)word">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
word">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()word">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,查看内容

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

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

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

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

python">    # 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))word">print(class_list)word">print(name_list)# 获取该文件夹下所有的文件(包括文件夹)original_file_path = "E:\要交的赶紧搞\过程性评价表"

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


http://www.ppmy.cn/news/1562926.html

相关文章

【matlab学习】使用matlab求解微积分,进行数值积分和符号积分的计算

本部分的学习参考欧攀老师的《高等光学仿真(MATLAB版)》,为自学笔记 基本概念 符号积分,又称解析积分,是微积分中的一个基本运算。它通过数学推导和变换,求出被积函数的原函数或反导数,从而得到积分的精确值。符号积分的表示方法主要依赖于积分符号“∫”以及被积函数和…

大模型系列——推理能力增强 rStar-Math 论文笔记

我们提出rStart-Math来证明小型语言模型SLM可以与OpenAI O1的数学推理能力相媲美甚至超越,而无需从更高级的模型中蒸馏。rStart-Math通过蒙特卡洛树搜索MCTS来实现深度思考,其中一个数学策略SLM执行测试时搜索,该搜索由基于SLM的过程奖励模型…

设计模式(3)——工厂模式

文章目录 三、day31. 简单工厂模式2. 工厂模式3. 抽象工厂模式 三、day3 今天学习最常见的设计模式之一——工厂模式。工厂模式提供了一种创建对象的最佳方式,在创建对象的时候,不会对客户端暴露创建逻辑,并且通过使用一个共同的接口来创建新…

【免费开源】积木JimuBI大屏集成ruoyiVue

JimuBI介绍 JimuBI 是一个JAVA语言的低代码数据可视化大屏BI产品,将大屏、仪表盘、移动面板、图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。 这是JeecgBoot团队出品的另外一款报表产品,积木报表已经成为业内报表首先&#x…

品牌账号矩阵如何打造?来抄作业

在讲究全域营销的当下,目前企业都在各自搭建品牌矩阵号,以提升自己在不同渠道上的影响力。虽然不同平台之间有诸多细节值得深究,但也不妨碍我们先了解如何搭建品牌矩阵。接下来,就让我们一同来了解下该如何搭建。 一、一个主账号 …

初学stm32 --- DAC输出三角波和正弦波

输出三角波实验简要: 1,功能描述 通过DAC1通道1(PA4)输出三角波,然后通过DS100示波器查看波形 2,关闭通道1触发(即自动) TEN1位置0 3,关闭输出缓冲 BOFF1位置1 4,使用12位右对齐模式 将数字量写入DAC_…

SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示

使用Beetl开发网页时,在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下: (1)首先Spring Security框架需要允许js、css、图片资源免授权访问。 (2)网站开发时&#xff0…

【MySQL】count(*)、count(1)和count(列名)区别

问题:用count(*),count(1),count(列名)谁好呢? 其实,对于MyISAM引擎的表是没有区别的。这种引擎内部有一计数器在维护着行数。 Innodb引擎的表用count(*),count(1)直接读行数,复杂度是O(n),因为innodb真的…