python的openpyxl库设置表格样式:字体/边框/对齐/颜色等

图片

学习目录

1. 安装和使用openpyxl库设置表格样式

2 设置字体font

3 设置边框

4 设置对齐方式

5 设置单元格数据格式

6 设置行高和列宽 

7 填充单元格颜色

附录-关于颜色说明

本章节主要介绍如何使用openpyxl库设置表格中的一些样式,比如字体,边框,对齐方式,单元格格式,行高和列宽等。

1 安装和使用openpyxl库设置表格样式

执行pip命令安装openpyx库:

pip install openpyxl -i https://mirrors.aliyun.com/pypi/simple/

目前最新版本3.1.5,安装后在styles目录下有多个模块

图片

在styles目录的文件__init__.py中导入了一些常用的类。

  • Color类: 设置颜色
  • Font类: 设置字体
  • Alignment类:设置示对齐方式
  • Border和Side:设置边框样式
  • PatternFill:填充单元格颜色

2 设置字体font

我们先导入Font类:

from openpyxl.styles import Font

Font类初始化函数如下:

图片

一些常用参数具体解释如下:

name

设置字体名称。比如"Arial","Times New Roman","微软雅黑",‘宋体’,‘仿宋’等

sz或者size

字体大小,比如数字11

i或者italic

是否设置斜体。

strike

是否设置删除线。

outline

是否设置轮廓

shadow

是否设置阴影

colour

字体颜色

b或者bold

是否设置加粗

underline

是否设置下划线

family

设置字体集。

charset

设置字符集

其中字体的颜色需要用到类openpyxl.colors.Color类

图片

对应的一些color信息在colors.py文件最上方的元组COLOR_INDEX中有预置的颜色数据

图片

黑色BLACK为第1个元素,白色WHITE为第2个元素,红色RED为第3个元素等

所以颜色对象可设置为:

from openpyxl.styles import colors
#颜色设置为红色
color_ins = colors.Color(index=2)

关于颜色的说明,参考文章最末尾。

在单元格上设置字体,完整代码如下:

from openpyxl.styles import Font,colors
from openpyxl import Workbook
wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#单元格设置内容
cell0 = sheet0.cell(1,1,'hello python')
#设置字体对象 颜色为红色
font_ins = Font(name="微软雅黑", sz=18, family=2, b=True, i=True,
color=colors.Color(index=2), scheme="minor")
#将字体对象赋予单元格
cell0.font = font_ins
#保存文件
wb.save('1.xlsx') #保存文件

结果如下:

图片

3 设置边框

跟设置字体一样,我们先导入Border类和Side类:

from openpyxl.styles import Border,Side

Border类初始化函数如下:

图片

初始化函数的常用参数解释如下:

left

设置左边框,为一个Side对象,可以指定边框的样式(如细线、粗线等)和颜色。

right

设置右边框,同上

top

设置上边框,同上

bottom

设置下边框,同上

diagonal

设置对角线样式,同上

diagonalUp

设置对角线的方向,表示从右上到左下。

diagonalDown

设置对角线的方向,表示从左上到右下。

而Side类同Border类在同一模块文件中:

图片

由于Border类的各个边框属性(left、right、top、bottom等)都是Side对象,因此了解Side类的属性也很重要:

  • style:指定边框的样式。可选值如下:

"thin":细线;"medium":中等粗细线;"thick":粗线

"double":双线;"hair":细线;"dotted":点线

"dashDot":点划线;"dashDotDot":双点划线;"dashed":虚线

"dashDotDot":双点划线;"mediumDashDot":中等点划线

"mediumDashed":中等虚线;"mediumDashDotDot":中等双点划线

"slantDashDot":斜线点划线

  • color:设置边框的颜色。可以使用颜色名称的字符串。

测试代码如下:

from openpyxl import Workbook
from openpyxl.styles import Border, Side# 创建一个新的工作簿和工作表
wb = Workbook()
sheet0 = wb.active# 创建一个Border对象并设置其属性
border = Border(
left=Side(style='thick', color='FF0000'), # 左边框:粗线,红色
right=Side(style='thin', color='FF0000'), # 右边框:细线,红色色
top=Side(style='double', color='FF0000'), # 顶部边框:双线,红色
bottom=Side(style='medium', color='FF0000') # 底部边框:粗线,红色
diagonal=Side(style='medium', color='000000'),# 对角线:粗线,黑色
diagonalDown=True #对角线,左上到右下
)# 将Border对象应用到单元格的边框属性上
sheet0 ['A1'].border = border# 也可以为特定区域设置边框
for row in sheet0 ['A1:C3']:
for cell in row:
cell.border = border# 保存工作簿
wb.save("2.xlsx")

结果:

图片

4 设置对齐方式

跟设置字体一样,我们先导入Alignment类

from openpyxl.styles import Alignment

Alignment类初始化函数如下:

图片

主要属性具体解释如下:

horizontal

设置水平对齐方式

‘general’(默认): 一般对齐

‘left’:左对齐

‘center’:居中对齐

‘right’:右对齐

‘fill’:填充对齐

‘justify’:两端对齐

‘centerContinuous’:连续居中对齐

‘distributed’:分散对齐

vertical

设置垂直对齐方式

‘top’:顶部对齐

‘center’:居中对齐

‘bottom’:底部对齐

‘justify’:两端对齐

‘distributed’:分散对齐

shrinkToFit

如果为True,当文本过长时,将缩小字体以适应单元格宽度;默认为False。

textRotation或者text_rotation

设置字体旋转方向,数值为0-180之间的数字

indent

文本缩进级别,整数值,默认为0。

wrapText或者wrap_text

是否设置自动换行

测试代码:
from openpyxl import Workbook
from openpyxl.styles import Alignment
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 创建一个对齐对象并设置属性
alignment = Alignment(horizontal='center', vertical='center', wrap_text=True, indent=1, text_rotation=20)
# 设置一个单元格对象并应用对齐方式的对象
ws['A1'] = "Hello Pyhon"
ws['A1'].alignment = alignment
# 保存工作簿到文件
wb.save('3.xlsx')
结果:

图片

5 设置单元格数据格式

导入数据格式的字典:

from openpyxl.styles.numbers import BUILTIN_FORMATS

字典如下:

图片

跟excel表中我们定义单元格格式中的自定义格式是一样的

图片

测试代码如下:
from openpyxl import Workbook
from openpyxl.styles.numbers import BUILTIN_FORMATS
# 创建一个新的Excel工作簿和工作表
wb = Workbook()
ws = wb.active
# 将一些数据写入单元格
ws['A1'] = 12345.6789
# 设置单元格A1的数字格式为带有两位小数的格式
ws['A1'].number_format = BUILTIN_FORMATS[2]
#填入日期
ws['B1'] = datetime(2024,11,23)
# 设置日期格式
ws['B1'].number_format = BUILTIN_FORMATS[16]
# 保存Excel文件
wb.save('4.xlsx')

结果如下:

图片

6 设置行高和列宽

使用Worksheet对象的row_dimensions和column_dimensions属性来设置行高和列宽。

测试代码:

from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
sheet = wb.active
# 设置第2行的高度为30(单位通常是磅)
sheet.row_dimensions[2].height = 30
# 设置第C列的宽度为20 (这是一个字符宽度单位,不是像素或磅)
sheet.column_dimensions['C'].width = 20
# 保存工作簿
wb.save('5.xlsx')

7 填充单元格颜色

跟设置字体一样,我们先导入PatternFill类

from openpyxl.styles import PatternFill

PatternFill类初始化函数如下:

图片

  • fill_type: 填充类型

None:没有填充样式。

solid:实心填充。

darkVertical:暗色的垂直线条填充。

darkHorizontal:暗色的水平线条填充。

darkGrid:暗色的网格线条填充。

darkTrellis:暗色的网格线条填充。

lightHorizontal:亮色的水平线条填充。

lightVertical:亮色的垂直线条填充。

lightGrid:亮色的网格线条填充。

lightTrellis:亮色的网格线条填充。

gray0625:灰色的网格线条填充。

lightGray:亮灰色的网格线条填充。

darkGray:暗灰色的网格线条填充。

darkUp:暗色的向上对角线条填充。

darkDown:暗色的向下对角线条填充。

darkGrid:暗色的网格线条填充。

darkTrellis:暗色的 trellis 网格线条填充。

  • start_color: 起始颜色,输入颜色16进制的字符串。
  • end_color: 结束颜色,输入颜色16进制的字符串。
  • fgColor:起始颜色,通常为Color对象
  • bgColor:结束颜色,通常为Color对象

测试代码:

from openpyxl import Workbook
from openpyxl.styles import PatternFill,colors
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 选择一个单元格并应用填充颜色
ws['A1'].fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="darkUp")
# 设置单元格的值
ws['A1'] = "这是一个黄色背景的单元格"
# 选择一个单元格并应用填充颜色
ws['A2'].fill = PatternFill(fgColor=colors.Color(indexed="778899"), bgColor=colors.Color(indexed="778899"),
fill_type="lightTrellis")
# 设置单元格的值
ws['A2'] = "这是一个浅石板灰背景的单元格"
# 选择一个单元格并应用填充颜色
ws['A3'].fill = PatternFill(start_color="F0F8FF", end_color="F0F8FF", fill_type="solid")
# 设置单元格的值
ws['A3'] = "这是一个爱丽丝蓝背景的单元格"
# 保存工作簿
wb.save("example.xlsx")

结果:

图片

附录

关于颜色说明

在OpenPyXL库中,用于Excel电子表格处理时,颜色是以RGB (Red, Green, Blue) 或者 16 进制格式来表示的。16进制颜色代码通常由#开头,随后跟着六个字符,前两个代表红色分量(00 到 FF),中间两个代表绿色分量,最后两个代表蓝色分量(同样范围)。例如,#FF0000 表示红色,#00FF00 表示绿色,#0000FF 表示蓝色。

形像颜色

对应颜色

形像颜色

对应颜色

纯白

FFFFFF

亮紫色

FF00FF

纯黑

000000

纯紫

FF00FF

象牙色

FFFFF0

纯红

FF0000

浅黄色

FFFFE0

老饰带

FDF5E6

柠檬黄

FFFF00

浅秋麒麟黄

FAFAD2

黄色

FFFF00

亚麻布

FAF0E6

FFFAFA

古代的白色

FAEBD7

花的白色

FFFAF0

鲜肉(鲑鱼)色

FA8072

柠檬薄纱

FFFACD

幽灵的白色

F8F8FF

玉米色

FFF8DC

适中的春天的绿色

F5FFFA

海贝壳

FFF5EE

白烟

F5F5F5

偏红的淡紫色

FFF0F5

小麦色

F5DEB3

番木瓜

FFEFD5

沙棕色

F4A460

漂白的杏仁

FFEBCD

蔚蓝色

F0FFFF

薄雾玫瑰

FFE4E1

蜂蜜

F0FFF0

(浓汤)乳脂,番茄等

FFE4C4

爱丽丝蓝

F0F8FF

鹿皮鞋

FFE4B5

卡其布

F0E68C

Navajo白

FFDEAD

淡珊瑚色

F08080

桃色

FFDAB9

灰秋麒麟

EEE8AA

FFD700

紫罗兰

EE82EE

粉红

FFC0CB

深鲜肉(鲑鱼)色

E9967A

浅粉色

FFB6C1

薰衣草花的淡紫色

E6E6FA

橙色

FFA500

淡青色

E1FFFF

浅鲜肉(鲑鱼)色

FFA07A

结实的树

DEB887

深橙色

FF8C00

李子

DDA0DD

珊瑚

FF7F50

Gainsboro

DCDCDC

热情的粉红

FF69B4

猩红

DC143C

番茄

FF6347

苍白的紫罗兰红色

DB7093

橙红色

FF4500

秋麒麟

DAA520

深粉色

FF1493

兰花的紫色

DA70D6

D8BFD8

淡蓝色

87CEFA

浅灰色

D3D3D3

天蓝色

87CEEB

晒黑

D2B48C

灰色

808080

巧克力

D2691E

橄榄绿

808000

秘鲁

CD853F

紫色

800080

印度红

CD5C5C

栗色

800000

适中的紫罗兰红色

C71585

绿玉

7FFFAA

银白色

C0C0C0

查特酒绿

7FFF00

深卡其布

BDB76B

草坪绿

7CFC00

玫瑰棕色

BC8F8F

适中的板岩暗蓝灰色

7B68EE

适中的兰花紫

BA55D3

浅石板灰

778899

耐火砖

B22222

石板灰

708090

火药蓝

B0E0E6

米色(浅褐色)

6B8E23

淡钢蓝

B0C4DE

板岩暗蓝灰色

6A5ACD

苍白的绿宝石

AFEEEE

暗淡的灰色

696969

绿黄色

ADFF2F

矢车菊的蓝色

6495ED

淡蓝

ADD8E6

军校蓝

5F9EA0

深灰色

A9A9A9

橄榄土褐色(褐绿色)

556B2F

棕色

A52A2A

靛青

4B0082

黄土赭色

A0522D

适中的绿宝石

48D1CC

深兰花紫

9932CC

深岩暗蓝灰色

483D8B

苍白的绿色

98FB98

钢蓝

4682B4

深蓝紫色

9400D3

宝蓝

4.17E+04

适中的蓝紫色

9370DB

绿宝石

40E0D0

淡绿色

90EE90

春天的绿色

3CB371

深海洋绿

8FBC8F

酸橙绿

32CD32

马鞍棕色

8B4513

深石板灰

2F4F4F

深紫色

8B008B

海洋绿

2E8B57

深红色

8B0000

森林绿

228B22

深紫罗兰的蓝色

8A2BE2

浅海洋绿

20B2AA

道奇蓝

1E90FF

深天蓝

00BFFF

午夜的蓝色

191970

深青色

008B8B

水绿色,青色

00FFFF

水鸭色

008080

薄荷奶油

00FF7F

深绿色

006400

绿色

00FF00

蓝色

0000FF

适中的碧绿色

00FA9A

适中的蓝色

0000CD

深绿宝石

00CED1

深蓝色

00008B

海军蓝,深靛蓝

000080

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

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

相关文章

Git旧文件覆盖引发思考

一天,我的同事过来找到我,和我讲:张叫兽,大事不好,我的文件被人覆盖了。git是真的不好用啊 git不好用?文件被覆盖;瞬间我似乎知道了什么,让我想到了某位男明星的语法:他…

QSqlTableModel的使用

实例功能 这边使用一个实例显示数据库 demodb 中 employee 数据表的内容,实现编辑、插入、删除的操作,实现数据的排序和记录过滤,还实现 BLOB 类型字段 Photo 中存储照片的显示、导入等操作,运行界面如下图: 在上图中…

什么是代理,nodenginx前端代理详解

一. 什么是代理? 代理就是通过一个特殊的网络服务去访问另一网络服务的一种间接访问方式。像我们不能直接访问国外的网站,只能使用VPN,就是使用了代理 二. 前端为什么要用代理? 首先明确以下两个概念 (1&#xff09…

java脚手架系列16-AI大模型集成

之所以想写这一系列,是因为之前工作过程中有几次项目是从零开始搭建的,而且项目涉及的内容还不少。在这过程中,遇到了很多棘手的非业务问题,在不断实践过程中慢慢积累出一些基本的实践经验,认为这些与业务无关的基本的…

网络安全中的数据科学如何重新定义安全实践?

组织每天处理大量数据,这些数据由各个团队和部门管理。这使得全面了解潜在威胁变得非常困难,常常导致疏忽。以前,公司依靠 FUD 方法(恐惧、不确定性和怀疑)来识别潜在攻击。然而,将数据科学集成到网络安全中…

【算法day1】数组:双指针算法

题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜…

open-instruct框架使用记录:只使用huggingface数据集的小部分进行训练,如何修改dataset_info.json文件

open-instruct框架 这篇笔记主要记录以下问题:只使用huggingface下载的数据集中的一小部分数据进行数据训练。而且我不想修改open-instruct的加载数据集的代码,以及脚本中的--dataset_mixer_list参数的指定等。下面是我的思路历程。 if args.dataset_na…

Jenkins升级到最新版本后无法启动

1. 场景还原 最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下: 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…

DRM(数字权限管理技术)防截屏录屏----ffmpeg安装

提示:ffmpeg安装 文章目录 [TOC](文章目录) 前言一、下载二、配置环境变量三、运行ffmpeg四、文档总结 前言 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的…

Unity版本使用情况统计(更新至2024年11月)

UWA发布|本期UWA发布的内容是第十五期Unity版本使用统计,统计周期为2024年5月至2024年11月,数据来源于UWA网站(www.uwa4d.com)性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势作为参考。 2024年5月 - 2024年…

Spring Aop 中对JoinPoint的理解

以下是源码中对 JoinPoint 的描述 A runtime joinpoint is an event that occurs on a static joinpoint (i.e. a location in a program). For instance, an invocation is the runtime joinpoint on a method (static joinpoint). The static part of a given joinpoint can…

C中指针在64位操作系统下为什么是4而不是8

好久没写C了,今天用VScode想写个Demo,翻了下指针资料,想打印下指针大小,发现是4,但是理论上64位系统不应该是8么? 结论就是我编的是32位程序,编译器按照32位编译的。 用vscode的C 插件编译运行…

使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程

有时候我们发现一个好玩的 demo,想赶快在电脑上 pip install 一下跑起来,发现因为 python 的 venv、conda 环境还挺费劲的,因为随着时间的发展,之前记得很清楚的 venv、conda 的用法,不经常使用,半天跑不起…

鸿蒙主流路由详解

鸿蒙主流路由详解 Navigation Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由 Navigation官网地址 个人源码地址 路由跳转 第一步-定义路由栈 Provide(PageInfo) pag…

Flink Sink的使用

经过一系列Transformation转换操作后,最后一定要调用Sink操作,才会形成一个完整的DataFlow拓扑。只有调用了Sink操作,才会产生最终的计算结果,这些数据可以写入到的文件、输出到指定的网络端口、消息中间件、外部的文件系统或者是…

鸿蒙本地模拟器 模拟TCP服务端的过程

鸿蒙模拟器模拟TCP服务端的过程涉及几个关键步骤,主要包括创建TCPSocketServer实例、绑定IP地址和端口、监听连接请求、接收和发送数据以及处理连接事件。以下是详细的模拟过程: **1.创建TCPSocketServer实例:**首先,需要导入鸿蒙…

【VUE3】新版Vue3+ElementPlus全家桶开发视频项目实战

VUE 介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 Vue.js是一个MVVM(Model - View - ViewModel)的SPA框架。 Model:数…

Edify 3D: Scalable High-Quality 3D Asset Generation

Deep Imagination Research | NVIDIA 目录 一、Abstract 二、核心内容 1、多视图扩散模型 3、重建模型: 4、数据处理模块: 三、结果 1、文本到 3D 生成结果 2、图像到 3D 生成结果 3、四边形网格拓扑结构 一、Abstract NVIDIA 开发的用于高质量…

Python爬虫能处理动态加载的内容吗?

Python爬虫确实可以处理动态加载的内容。动态加载的内容通常是通过JavaScript在客户端执行,这意味着当网页首次加载时,服务器返回的HTML可能并不包含最终用户看到的内容。相反,JavaScript代码会在页面加载后从服务器请求额外的数据&#xff0…

JavaScript练习2——动态“钟”的绘制

实现效果: 分析需求: 1、需要每隔一定时间间隔执行一次绘图,实现旋转效果 2、需要绘制矩形框、圆形缺口框、文字 3、需要设置style 代码实现: 下面给出关键代码的实现,部分函数在之前的文章已经给出 https://blog.…