python自动化办公——定制化读取Excel数据并写入到word表格

news2024/9/25 19:21:16

Python自动化办公——Excel写word表格

文章目录

  • Python自动化办公——Excel写word表格
    • 一、引言
    • 二、数据准备
    • 三、python代码
      • 1、方法一
      • 2、方法二
      • 3、方法三

一、引言

最近到了毕业设计答辩的时候,老师让我帮毕业生写一段毕业设计的功能就是提供一个学士学位授予申请表,根据定制化需求,编写定制化代码。

二、数据准备

docx格式的word如下图。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JBrj88Zk-1687013257270)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230615225250472.png)]

再提供一个Excel表格,要求可以直接读取表格里的对应内容,填入到word表格里的对应位置。表格是我自己定义的如下表:

学生姓名所在院系班级简称学号(10位)学制身份证号专业名称外语A级外语四级外语六级专业四级专业八级项目名称1项目名称2项目名称3项目名称4项目名称5项目名称6项目名称7项目名称8奖励绩点1奖励绩点2奖励绩点3奖励绩点4奖励绩点5奖励绩点6奖励绩点7奖励绩点8处分名称1处分名称2处分名称3罚扣绩点1罚扣绩点2罚扣绩点3处分时间1处分时间2处分时间3
天海电子与信息工程学院智能BG201744411115555452013145555人工智能智慧农业可视化计算机视觉教辅计赛国家一等奖互联网+省二等奖0.20.20.40.1偷吃老师抽屉的饼干撒谎的人要吞一千根针哦0.10.92023年6年15日2022年12月14日

三、python代码

那么根据定制化需求,我制作了三套代码。

1、方法一

我们的逻辑是:

  1. 读取Excel文件
  2. 找准word中表格对应位置与顺序
  3. 插入读取到Excel中的数据到word表格中

先展示最终嵌入到项目中的代码吧.

首先需要引入docx的库和pandas库,注意由于docx库的版本不同使用的方法也有一定差异

import docx
from docx.enum.text import WD_ALIGN_PARAGRAPH
import pandas as pd

接下来进行第一步,读取表格数据,并打开word

#打开或创建word文档
doc_name = "test.docx"
doc = docx.Document(doc_name)
# 读取Excel数据
df = pd.read_excel('source.xlsx', sheet_name='info')

content = [list(row) for _, row in df.iterrows()]

print(content)

人为分析了word的表格索引位置,并写入index中

table = doc.tables[0]

index = [[0,3],[0,12],[1,3],[1,12],[2,3],[2,12],[5,3],
[5,5],[5,10],[5,13],[5,16],[7,7],[7,16],[8,7],[8,16],
[9,7],[9,16],[10,7],[10,16],[12,3],[12,7],[12,11],
[13,3],[13,7],[13,11],[14,3],[14,7],[14,11]]

写入28条数据并将空的数据输入空格,设置居中和宋体字体,随后将输出的word保存为学号+.docx

for i in range(0,28):
	cell = table.cell(index[i][0],index[i][1])
	cell.text = str(content[0][i])
	if cell.text == 'nan':
		cell.text = ' '
	print('%d:'%i,cell.text)
	cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
	for par in cell.paragraphs:
		for run in par.runs:
			run.font.size = docx.shared.Pt(12)
			run.font.name = '宋体'


filename = str(df.iloc[0, 3])
doc.save(filename + '.docx')

完整代码如下:

import docx
from docx.enum.text import WD_ALIGN_PARAGRAPH
import pandas as pd
#打开或创建word文档
doc_name = "test.docx"
doc = docx.Document(doc_name)
# 读取Excel数据
df = pd.read_excel('source.xlsx', sheet_name='info')

content = [list(row) for _, row in df.iterrows()]

print(content)

table = doc.tables[0]

index = [[0,3],[0,12],[1,3],[1,12],[2,3],[2,12],[5,3],
[5,5],[5,10],[5,13],[5,16],[7,7],[7,16],[8,7],[8,16],
[9,7],[9,16],[10,7],[10,16],[12,3],[12,7],[12,11],
[13,3],[13,7],[13,11],[14,3],[14,7],[14,11]]


for i in range(0,28):
	cell = table.cell(index[i][0],index[i][1])
	cell.text = str(content[0][i])
	if cell.text == 'nan':
		cell.text = ' '
	print('%d:'%i,cell.text)
	cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
	for par in cell.paragraphs:
		for run in par.runs:
			run.font.size = docx.shared.Pt(12)
			run.font.name = '宋体'


filename = str(df.iloc[0, 3])
doc.save(filename + '.docx')

2、方法二

使用的方法二就是精简版的方法一,原理就是不考虑word表格分布写入数据,而是自己在代码里写一个新的word表格进行插入数据。

具体步骤如下:

  1. 读取Excel数据
  2. 生成、配置word的表格和名称
  3. 填写表格
  4. 保存word

代码如下:

这里我就是定义了两个循环来生成简单的37行2列的表格并填写数据

import pandas as pd
from docx import Document
from docx.shared import Inches

# 读取Excel数据
df = pd.read_excel('source.xlsx', sheet_name='info')

# 获取表格标题和内容
header = list(df.columns)
content = [list(row) for _, row in df.iterrows()]

# 生成Word文件名
filename = df.iloc[0, 3]
# 配置Word
document = Document('output.docx')
table = document.add_table(rows=37, cols=2, style='Table Grid')

# 填写表格
for i, text in enumerate(header):
    table.cell(i, 0).text = text
for i, row in enumerate(content):
    for j, text in enumerate(row):
        table.cell(j, i+1).text = str(text)

# 保存Word文件
document.save(f'{filename}.docx')

3、方法三

使用字符串匹配来进行变量的写入,缺点:无法进行表格写入,可以在无表格的word文章中发挥很大优势。

可以使用pyqt5来制作一个小工具进行文字替换。这里我也实现了,但由于代码量过大,这里不做介绍啦,有需要的可以私信我,再进行更新。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0K8kmBb-1687013257271)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230617224638416.png)]
document.save(f'{filename}.docx')

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

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

相关文章

网安自学路线学习心得/学习规划

趁着今天下班,我花了几个小时整理了下,非常不易,希望大家可以点赞收藏支持一波,谢谢。 我的经历: 我 19 年毕业,大学专业是物联网工程,我相信很多人在象牙塔里都很迷茫,到了大三大…

pywinauto自动化测试使用经验

本文主要介绍了pywinauto自动化测试使用经验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 在开发Windows应用程序时,我们经常需要进行测试来确保程序…

CSS基础学习--16 Float(浮动)

一、定义 CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列。 Float(浮动),往往是用于图像,但它在布局时一样非常有用。 元素的水平方向浮动,意味着…

【Spring】— Spring MVC的注解

目录 Spring MVC的注解1.DispatcherServlet2.Controller注解类型3.RequestMapping注解类型(1)RequestMapping注解的使用(2)RequestMapping注解的属性(3) 组合注解(4)请求处理方法的参…

2023天猫纸品数据:抽纸销额高达25亿,湿厕纸为重点增长类目

如今,纸巾早已成为人们日常生活的必需品。作为刚需物品,纸巾的产品形态呈现多元化、细分化趋势,其市场规模也比较庞大。 根据鲸参谋电商数据分析平台的相关数据显示,今年1月至4月,天猫平台上纸巾行业大盘的销量超过1.6…

05 用况图

用况图 1. 主题 是由一组用况所描述的一个系统或子系统。 以Credit Card Validation System 所标识的矩形就是一个主题: 2. 用况 使用视角: 用况表达了参与者使用系统的一种方式。 系统设计视角:一个use case规约了系统可以执行的一个动…

Spring AOP讲解

目录 Spring AOP概念 AOP适用场景 AOP 组成 1、切面(Aspect) 2、切点(Pointcut) 3、通知(Advice) 4、连接点(Join Point) Spring AOP实现 添加AOP框架依赖 定义切面和切点…

解决 An attempt was made to call a method that does not exist. 问题详解

哈喽大家好,我是阿Q。今天在开发代码的过程中,由于手抖,不知道引入了什么包依赖,导致项目启动一直报错,特写本文来记录下解决问题的经过。 文章目录 问题描述报错信息如下报错描述 解决方法总结 有想赚点外块|技术交流…

hadoop基础(二)

JAVA客户端 环境搭建 创建Maven项目,添加Hadoop依赖. <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId…

神级插件Bito介绍及使用

还在用其他AI?不是说它不火了&#xff0c;而是你基本上很难访问了。这里介绍个便宜且免费的AI聊天插件&#xff0c;一样可以很棒。永久免费且不限制次数&#xff0c;有这好事&#xff1f;且听下文分解。 前言 虽然GPT 是用不了&#xff0c;推荐下国内的一些大模型&#xff0c…

Win10下pytorch3D安装方法,本人亲测可用

本人的电脑配置如下&#xff1a; GPU&#xff1a;GTX 1050TiCUDA&#xff1a;11.1python&#xff1a;3.8pytorch&#xff1a;1.9.0pytorch3d&#xff1a;0.7.1NVIDIA CUB&#xff1a;cub-1.9.10-1 目录 1.版本确认 2.下载cub 3.下载pytorch3d 4.下载VSC2019 5.编译pytorch…

Web3开发准备工作 手把手带你创建自己的 MetaMask 账号

查看本文 您需要在自己的谷歌浏览器中添加 扩展工具 MetaMask 如果没有添加 可以查看文章 Web3 将 MetaMask添加入谷歌浏览器 扩展程序中 我们打开它并点击开始使用 那么 我们第一次进来 肯定是啥都没有 所以 我们点 创建钱包 他这里 就会先跟你说清楚 他不会收集你的 秘钥 地…

握手信号的打拍

在数字电路的设计中,对关键路径的处理方法之一就是插入寄存器,然而,对握手信号插入寄存器则需要进行特殊的处理,否则可能导致数据传输的错乱,严重影响电路的功能。 如图所示,为了阐述对握手信号打拍的处理方式,我们给出了下图所示的简化模型,其中,上游的握手信号包括v…

OpenCV迭代去畸变undistortPoints 与vins的迭代不同 第二章vins前端 第三章imu预积分 第四章vio初始化

OpenCV去畸变undistortPoints原理解析 不动点迭代法—单变量非线性方程近似根matlab求解 淦VINS-MONO源码 03–openCV与VINS中去畸变方法的不同 这里用的方法和openCV不同&#xff0c;假设现在求A点的去畸变坐标&#xff0c;那么我们将A的坐标直接代入畸变模型中&#xff0c;求…

【Leetcode】2. 两数相加

一、题目 1、题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例1: …

知识图谱项目——红色文化之张学良人物知识图谱(Neo4j+vue+flask+mysql实现)

张学良人物简史知识图谱_说明文档 本项目为人工智能专业大三知识图谱课程期末作业。意在完成一个以张学良为背景的红色文化类知识图谱。文末放上本项目的代码地址。 文章目录 张学良人物简史知识图谱_说明文档:rocket:前端:rocket:后端:rocket:中间件:rocket:数据库:rocket:服…

深度学习(22)——YOLO系列(2)

深度学习&#xff08;22&#xff09;——YOLO系列&#xff08;2&#xff09; 文章目录 深度学习&#xff08;22&#xff09;——YOLO系列&#xff08;2&#xff09;1. model2. dataset3. utils4. test/detect5. detect全过程 今天先写YOLO v3的代码&#xff0c;后面再出v5&…

代码托管/版本控制工具:Git的安装和使用

目录 一、Git的下载和安装二、Git基本配置三、代码上传到远程仓库四、代码下载到本地 一、Git的下载和安装 1.登录GitHub官网https://github.com/注册账户密码 2.登录https://git-scm.com/download/win &#xff08;根据自己电脑的位数和系统下载git&#xff09; 3.双击Gi…

02-IDEA 集成Maven

一. 下载IDEA编辑器 下载地址&#xff1a;Download IntelliJ IDEA – The Leading Java and Kotlin IDE 选中免费开源的社区版本 创建桌面图标和添加安装路径到系统变量&#xff0c;其他的默认安装即可。 二. 配置Maven环境 分为局部配置和全局配置 1. 局部配置maven环境 …

004依赖

传递 一个坐标引入多个jar 传递 子工程 引入了父pom 也是一种传递 继承 继承是为了消除重复&#xff0c;如果将 dao、service、web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复&#xff0c;比如&#xff1a;设置编译版本、锁定 spring 的版本的等&#xff…