【Python】利用python-docx生成word版本学生花名册

news2025/1/11 13:58:58

如图,可以用python创建word文档,生成一个学生的花名册。生成的过程:先下载第三方依赖包,安装依赖包,然后引入依赖文件,创建docx文件,添加标题,创建表头,创建表格正文,居中填写表头内容、项目行、表格正文。

目录

一、安装Python-docx包

(一)下载

1、官网下载

2、下载步骤

(二)安装步骤

二、文件格式

(一)标题栏

(二)表格

1、表头

2、项目行

3、表格正文

三、python-docx中表格相关知识

(一)表格设计

1、表格框架

2、单元格

3、段落

(二)表格内容居中

1、水平居中

2、垂直居中

四、完整程序代码

(一)引入依赖

(二)声明学生花名册相关变量

(三)最终代码


一、安装Python-docx包

(一)下载

1、官网下载

官网网址:python-docx · PyPI

2、下载步骤

点击Download files,点击python-docx-0.8.11.tar.gz压缩包开始下载。

(二)安装步骤

打开cmd命令行窗口,把刚刚下载的python-docx-0.8.11.tar.gz压缩包复制到命令行窗口默认的目录下,一般都是C:\Users\****>。

在命令行输入pip install python-docx-0.8.11.tar.gz后回车,执行完安装的结果如下图:

二、文件格式

(一)标题栏

word文档设定一个标题栏,标题为“金庸小学学生花名册”。

(二)表格

1、表头

表头为1行1列,是表格的名称“四年(5)班”。

2、项目行

学生花名册一共有学号、姓名、性别、出生日期、民族5个项目,项目行为1行5列。

3、表格正文

表格正文为10个学生的具体信息,为10行5列。

三、python-docx中表格相关知识

(一)表格设计

1、表格框架

因为表头和项目行、表格正文格式不一样,所以需要创建两个表格,1个为1行1列的表格table1,1个为11行5列的表格table2。

python-docx中创建表格的方法为add_table(行数,列数)

# 创建表头
table1=document.add_table(1,1)

# 创建表格
table2=document.add_table(11,5)

2、单元格

python-docx中表格中的单元格为table.cell(行序号,列序号)。

3、段落

python-docx中表格中的单元格中的文字内容为段落,为table.cell(行序号,列序号).paragraphs[段落序号]。

(二)表格内容居中

1、水平居中

table1.cell(0,0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER

2、垂直居中

因为每个表格里创建的是一个段落,段落行距离,有段前、段后距离,可以设置段前、段后的距离等于行距的一半即可以完成垂直居中。

table1.cell(0,0).paragraphs[0].paragraph_format.line_spacing = Pt(12)
table1.cell(0,0).paragraphs[0].paragraph_format.space_before = Pt(6)
table1.cell(0,0).paragraphs[0].paragraph_format.space_after = Pt(6)

四、完整程序代码

(一)引入依赖

#引入word文件包
from docx import Document

#引入表格对齐文件包
from docx.enum.table import WD_TABLE_ALIGNMENT

#引入表格段落对齐文件包
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

#引入英尺、磅尺寸文件包
from docx.shared import Inches,Pt

#引入表格单元格水平对齐文件包
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT

(二)声明学生花名册相关变量

# 学生学号起始编号
student_no=20230001

# 花名册项目名称
student_item = ["学号","姓名","性别","出生日期","民族"]

# 学生姓名列表
student_name = ["丁春秋","于万亭","王语嫣","平四","乔峰","李秋水","沈城","胡斐","袁紫衣","梅超风"]

# 学生民族列表
student_ethnic = ["汉族","汉族","白族","汉族","契丹","党项","汉族","汉族","汉族","汉族"]

# 学生性别列表
student_gender = ["男","男","女","男","男","女","男","男","女","女"]

# 学生出生年代列表
student_birthday = [1028,1700,1074,1738,1062,1000,1475,1753,1755,1191]

(三)最终代码

#引入word文件包
from docx import Document

#引入表格对齐文件包
from docx.enum.table import WD_TABLE_ALIGNMENT

#引入表格段落对齐文件包
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

#引入英尺、磅尺寸文件包
from docx.shared import Inches,Pt

#引入表格单元格水平对齐文件包
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT


# 学生学号起始编号
student_no=20230001

# 花名册项目名称
student_item = ["学号","姓名","性别","出生日期","民族"]

# 学生姓名列表
student_name = ["丁春秋","于万亭","王语嫣","平四","乔峰","李秋水","沈城","胡斐","袁紫衣","梅超风"]

# 学生民族列表
student_ethnic = ["汉族","汉族","白族","汉族","契丹","党项","汉族","汉族","汉族","汉族"]

# 学生性别列表
student_gender = ["男","男","女","男","男","女","男","男","女","女"]

# 学生出生年代列表
student_birthday = [1028,1700,1074,1738,1062,1000,1475,1753,1755,1191]

# 创建文件
document = Document()

# 添加标题
h=document.add_heading('金庸小学学生花名册',0)

# 标题居中
h.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

# 创建表头
table1=document.add_table(1,1)

# 创建表格
table2=document.add_table(11,5)

# 填写表头内容
table1.cell(0,0).text="四年(5)班"

# 表头内容格式:行间距12磅,段前6磅,段后6磅,也就是竖直居中
table1.cell(0,0).paragraphs[0].paragraph_format.line_spacing = Pt(12)
table1.cell(0,0).paragraphs[0].paragraph_format.space_before = Pt(6)
table1.cell(0,0).paragraphs[0].paragraph_format.space_after = Pt(6)

# 表头内容格式:水平居中
table1.cell(0,0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中


# 填写项目名称行
for i in range(5):
    table2.cell(0,i).text=student_item[i]
    table2.cell(0,i).paragraphs[0].paragraph_format.line_spacing = Pt(12)
    table2.cell(0,i).paragraphs[0].paragraph_format.space_before = Pt(6)
    table2.cell(0,i).paragraphs[0].paragraph_format.space_after = Pt(6)
    table2.cell(0,i).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中

# 填写学号列
for j in range(1,11):
    table2.cell(j,0).text=str(student_no+j-1)
    table2.cell(j,0).paragraphs[0].paragraph_format.line_spacing = Pt(12)
    table2.cell(j,0).paragraphs[0].paragraph_format.space_before = Pt(6)
    table2.cell(j,0).paragraphs[0].paragraph_format.space_after = Pt(6)
    table2.cell(j,0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中

# 填写姓名列
for j in range(1,11):
    table2.cell(j,1).text=sudent_name[j-1]
    table2.cell(j,1).paragraphs[0].paragraph_format.line_spacing = Pt(12)
    table2.cell(j,1).paragraphs[0].paragraph_format.space_before = Pt(6)
    table2.cell(j,1).paragraphs[0].paragraph_format.space_after = Pt(6)
    table2.cell(j,1).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中

# 填写性别列
for j in range(1,11):
    table2.cell(j,2).text=sudent_gender[j-1]
    table2.cell(j,2).paragraphs[0].paragraph_format.line_spacing = Pt(12)
    table2.cell(j,2).paragraphs[0].paragraph_format.space_before = Pt(6)
    table2.cell(j,2).paragraphs[0].paragraph_format.space_after = Pt(6)
    table2.cell(j,2).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中

# 填写出生年代列
for j in range(10):
    table2.cell(j,3).text=str(student_birthday[j])
    table2.cell(j,3).paragraphs[0].paragraph_format.line_spacing = Pt(12)
    table2.cell(j,3).paragraphs[0].paragraph_format.space_before = Pt(6)
    table2.cell(j,3).paragraphs[0].paragraph_format.space_after = Pt(6)
    table2.cell(j,3).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中

# 填写民族列
for j in range(1,11):
    table2.cell(j,4).text=sudent_ethnic[j-1]
    table2.cell(j,4).paragraphs[0].paragraph_format.line_spacing = Pt(12)
    table2.cell(j,4).paragraphs[0].paragraph_format.space_before = Pt(6)
    table2.cell(j,4).paragraphs[0].paragraph_format.space_after = Pt(6)
    table2.cell(j,4).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中

# 保存文档
document.save('student.docx')

(全文完)

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

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

相关文章

创作纪念日-我的第1024天

机缘 不知不觉已经成为创作者的第1024天啦… … 刚开始接触博客的初衷就是为了记笔记📒、记总结📝,或许对于当时就等同于是为了找工作。坚持学习并持续输出博客一年后,这时我发现再写博客,不在是为了找一份工作&…

比亚迪宋L高调亮相成都车展,媒介盒子多家媒体助阵

哈喽,大家好,今天媒介盒子小编又来跟大家分享媒体推广的干货知识了,本篇分享的主要内容是:比亚迪宋L的营销策略。 比亚迪宋L又于2023年8月25日在成都车展上首次亮相,该车将配备比亚迪黑科技中的CTB技术、云辇-C底盘系统和iTAC系统等,预计将在今年第四季…

python教程:如何写类?

目录标题 前言类的定义知识点扩展:构建和初始化1. __ new__(cls,[…)2. __ init__(self,[…)3. __ del__(self) 尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 类的定义 Python中&#…

正中优配:A股早盘三大股指微涨 华为概念表现活跃

周三(8月30日),到上午收盘,三大股指团体收涨。其间上证指数涨0.06%,报3137.72点;深证成指和创业板指别离涨0.33%、0.12%;沪深两市合计成交额6423.91亿元,总体来看,两市个…

一文搞懂CAN和CAN FD总线协议

一、CAN与CAN FD的概念 1、CAN是什么 控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种…

正中优配:创业板怎么开通

作为我国资本市场的一个重要组成部分,股票市场一直是出资者追逐高收益的抢手挑选。而近年来,创业板作为我国股票市场上的一颗新星,备受创业者、出资者的关注。但关于一些新手出资者来说,可能对“创业板怎样注册”这个问题还比较陌…

一文看懂开发者需要了解的信创概念

信创这个概念对于大家来说并不陌生,至少我们在海量的新闻中会时不时的听到这个概念,特别是在西方国家对中国进行技术封锁加剧时,证券市场中它还会时不时成为一个风口板块。 其实“信创”理解起来也并不困难,就像它的字面意思&…

手把手教你Jenkins整合Jmeter实现自动化接口测试

01、在机器上安装jmeter 下载:http://jmeter.apache.org/download_jmeter.cgi 这里我用了一台Windows安装jmeter用来写接口测试的脚本,启动前修改jmeter.properties 中 jmeter.save.saveservice.output_format值为xml。 编写接口测试脚本: …

外贸软件鞋类行业管理难点及解决方案

鞋子作为一种常见的商品,在出口外贸中占据着重要的地位。近几年,随着我国经济的建设步伐的不断加快,对外贸易活跃度也随之得以提升,中产阶层的消费人群及需求量都在不断增长,其中鞋业也经历了急剧的发展,成…

汽车自适应巡航系统控制策略研究

目 录 第一章 绪论 .............................................................................................................................. 1 1.1 研究背景及意义 ..........................................................................................…

C# 如何将使用的Dll嵌入到.exe应用程序中?

文章目录 前言详细实操简要步骤 前言 有没有想自己开发的exe保留一点神秘,不想让他人知道软件使用了哪些dll; 又或许是客户觉得一个软件里面的dll文件太多了,能不能简单一点,直接双击.exe就可以直接运行了,别搞那么多乱七八糟的。…

Android开发仿美团购物左右联动列表

概述 Android开发左右联动列表,仿照美团外卖点餐时,左右列表可以联动。 详细 Android开发仿美团购物左右联动列表 概述 左右联动列表是仿照美团外卖点餐时,左右列表可以联动。比如右边列表会有小项对应左边的,滑动时会置顶&a…

数字IC验证高频面试问题整理—附答案(三)

最近大家无不在讨论IC秋招,秋招想必缺的就是面试题目了。这不就来了~ 共150道验证高频面试题整理~含答案(文末可领取全部题目) Q1.二进制码、格雷码、独热码的特点 二进制码:基本的机器语言,每一位只能是0或1&…

K8s:一文带你认知 CRI,OCI,容器运行时,Pod 之间的关系

写在前面 博文内容整体结构为结合 华为云云原生课程 整理而来,部分内容做了补充课程是免费的,有华为云账户就可以看,适合理论认知,感觉很不错。有需要的小伙伴可以看看,链接在文末理解不足小伙伴帮忙指正 对每个人而言&#xff0c…

<硬件设计> 阻抗设计(一) 阻抗及其模型介绍

目录 01 阻抗相关介绍 阻抗(Electrical Impedance) 阻抗匹配(Impedance Matching) 常规的阻抗线(Impedance Matching) 02 微带线与带状线 微带线(MicroStrip) 带状线(Stripline) 03 文章总结 大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程师。 在…

mysql8.0以上忘记密码的重置方法 - window系统

1、关闭 mysql 服务,以 管理员身份 运行命令提示符工具,执行下面的命令 net stop mysql可以在任务管理器的服务中查看状态 2、跳过 mysql 权限验证,以管理员身份运行 cmd,进入 mysql 的安装 bin 目录,执行如下指令 m…

另一棵树的子树

目录 题目题目要求示例 解答方法一、实现思路时间复杂度和空间复杂度代码 方法二、实现思路时间复杂度和空间复杂度代码 题目 另一棵树的子树 题目要求 题目链接 示例 解答 方法一、 递归法 实现思路 依次将树中的每一棵子树都与目标树比较,如果有子树与目标…

树多选搜索查询,搜索后选中状态仍保留

<template><div class"half-transfer"><div class"el-transfer-panel"><div><el-checkbox v-model"selectAll" change"handleSelectAll">全部</el-checkbox></div><el-input v-model&qu…

使用gn+Ninja构建项目

使用下载编译好的gn和ninja报错 先下载了gn的源码[gn.googlesource.com/gn]&#xff0c;然后编译报错&#xff0c;就直接下载了了编译号的gn和Ninja&#xff0c;然后写了Helloworld应用的BUILD.gn&#xff0c;然后将"gn\examples\simple_build\build"拷贝至当前目录…

Qt之遮罩—实现不规则窗体

Qt之setMask() 前言 使用遮罩可以将窗口形状多样化&#xff0c;变成各种各样的图片或者图形&#xff0c;先看一下效果吧&#x1f447; 可以看到现在的窗口是一束花&#xff0c;而我们拖动花就相当于拖动窗口&#xff0c; setMask()只是说可以让哪些地方可见哪些地方不可见其…