我们知道Excel功能很强大,Python与Excel交互也有很多现成的模块可以用,主要有xlrd
、xlwt
、openpyxl
、xlsxwriter
这四种可以用,这些模块可以很好地通过Python实现Excel的功能,但是这些模块有一个不太方便的地方就是针对每一个单元格的行列位置去操作的,每次使用都很麻烦,不像DataFrame
那样可以针对行列去进行操作。DataFrame
虽然操作便利,但是DataFrame
又有个不如意的地方就是不能针对表去进行设置格式(字体颜色、大小之类的),所以有的时候为了可以设置表的格式还是需要用那几个比较麻烦的 Excel模块。直到我遇到了StyleFrame
模块,这个模块是把Pandas
和openpyxl
进行了结合,让你既可以享受DataFrame
的操作便利,又可以轻松利用openpyxl
进行表格样式设置。
接下来我们就看一看如何针对DataFrame表进行样式设置。要看怎么设置,我们得先看看可以设置什么。延续『对比Excel』特点,我们还是同样看看Excel中有哪些格式可以设置。
Excel中我们平常设置的主要有字体(类型、颜色、边框线、背景色、下划线、大小、加粗)、对齐方式(水平方向、垂直方向)、数字(数据显示格式,百分数、小数点位数、时间格式等设置)、条件格式四个部分。
因为StyleFrame
这个模块不是Anaconda自带的,所以需要我们手动进行安装。直接进行如下命令即可进行安装:
pip install StyleFrame
你也可以选择其他安装方式,关于包的安装方式可以看这篇:讲几种Python包的安装方式
如果你是python3.7
,那么你直接运行上述命令可能会报错,因为pip默认安装的是该模块的最新版本(目前最新是2.0.2),但是最新版本可能不太兼容,这个时候你可以安装1.6.2版本(2.0版本尝试了也安装失败)的,我就是用的1.6.2版本安装成功的。安装命令如下:
pip install StyleFrame==1.6.2
安装好以后,我们需要新建一个StyleFrame
供接下来使用,新建StyleFrame
使用的方法与新建DataFrame
用的一样。
from StyleFrame import StyleFrame, Styler, utils
sf = StyleFrame({"col_1": ["一","二","三"],
"col_2":["Excel","Sql","Python"]})
需要注意的是这里的sf不同于DataFrame
表的df,是不可以预览的。
我们主要通过对下面的Styler
进行样式设置。
Styler(bg_color=None, bold=False, font=utils.fonts.arial, font_size=12, font_color=None,
number_format=utils.number_formats.general, protection=False, underline=None,
border_type=utils.borders.thin, horizontal_alignment=utils.horizontal_alignments.center,
vertical_alignment=utils.vertical_alignments.center, wrap_text=True, shrink_to_fit=True,
fill_pattern_type=utils.fill_pattern_types.solid, indent=0, comment_author=None, comment_text=None)
以下为Styler
对象的参数说明:
参数 | 说明 |
---|---|
bg_color | 单元格背景色 |
bold | 字体加粗与否设置 |
font | 字体类型 |
font_size | 字体大小 |
font_color | 字体颜色 |
number_format | 数值格式 |
protection | 保护表格不被修改 |
underline | 下划线设置 |
border_type | 边框线设置 |
horizontal_alignment | 水平方向对齐设置 |
vertical_alignment | 垂直方向对齐设置 |
wrap_text | 是否自动换行 |
shrink_to_fit | 是否根据字符长度缩小以适应单元格 |
fill_pattern_type | 背景填充模式 |
indent | 缩进距离 |
comment_author | 批注作者 |
comment_text | 批注内容 |
设置完样式以后,我们就需要来指定在哪一行或哪一列上使用这个样式。
在某一列上使用样式时需要用到如下方法:
apply_column_style(cols_to_style,styler_obj,style_header)
参数说明如下:
参数 | 说明 |
---|---|
cols_to_style | 要设置样式的列名 |
styler_obj | 样式对象,即上面设置过的Styler |
style_header | 是否将表头也设置样式 |
我们除了在某一列上设置样式外,我们有的时候要需要针对某些行进行样式设置,用到的方法如下:
apply_style_by_indexes(indexes_to_style,styler_obj,cols_to_style)
参数说明如下:
参数 | 说明 |
---|---|
indexes_to_style | 要设置样式的行,sf[sf['col1'] = 20]表示设置col1列等于20的行 |
styler_obj | 样式对象 |
cols_to_style | 要设置通过indexes_to_style选出那些行对应的哪些列 |
这一篇我们主要讲讲字体相关的设置,其他设置留在下一篇再讲。
第一个是关于字体类型的设置,也就是什么字体,关于字体类型设置使用的是font
参数,主要有如下几种参数值(字体)可选:
aegean = 'Aegean'
aegyptus = 'Aegyptus'
aharoni = 'Aharoni CLM'
anaktoria = 'Anaktoria'
analecta = 'Analecta'
anatolian = 'Anatolian'
arial = 'Arial'
calibri = 'Calibri'
david = 'David CLM'
dejavu_sans = 'DejaVu Sans'
ellinia = 'Ellinia CLM'
字体类型中用的最多的就是arial
,即微软雅黑
。当我们把字体样式设置成Arial
样式,实现代码如下:
#将col_1和col_2列的字体设置成微软雅黑
sf.apply_column_style(cols_to_style=["col_1","col_2"],
styler_obj=Styler(font='Arial'),
style_header=True)
ew = StyleFrame.ExcelWriter(r'my_excel.xlsx')
sf.to_excel(ew)
ew.save()
我们用Excel打开设置样式后的文件,在字体类型那一栏就会显示Arial
:
第二个是关于字体颜色的设置,关于字体颜色设置使用的是font_color
参数,主要有如下几种参数值(颜色)可选:
white = op_colors.WHITE #白色
blue = op_colors.BLUE #蓝色
dark_blue = op_colors.DARKBLUE #深蓝色
yellow = op_colors.YELLOW #黄色
dark_yellow = op_colors.DARKYELLOW #深黄色
green = op_colors.GREEN #绿色
dark_green = op_colors.DARKGREEN #深绿色
black = op_colors.BLACK #黑色
red = op_colors.RED #红色
dark_red = op_colors.DARKRED #深红色
purple = '800080' #紫色
grey = 'D3D3D3' #灰色
我们把col_1
列的字体设置成绿色,col_2
列字体设置成红色,实现代码如下:
sf.apply_column_style(cols_to_style=["col_1"],
styler_obj=Styler(font_color='green'),
style_header=True)
sf.apply_column_style(cols_to_style=['col_2'],
styler_obj=Styler(font_color='red'),
style_header=True)
ew = StyleFrame.ExcelWriter(r'my_excel.xlsx')
sf.to_excel(ew)
ew.save()
最后效果如下:
第三个是关于单元格边框线设置的,关于边框线的设置使用的border_type
参数,主要有如下几种参数值(边框线类型)可选:
dash_dot = 'dashDot' #点划线
dash_dot_dot = 'dashDotDot' #双点划线
dashed = 'dashed' #虚线
dotted = 'dotted' #点线
double = 'double' #双线
hair = 'hair' #丝线
medium = 'medium'
medium_dash_dot = 'mediumDashDot' #中等点划线
medium_dash_dot_dot = 'mediumDashDotDot' #中等双点划线
medium_dashed = 'mediumDashed' #中等虚线
slant_dash_dot = 'slantDashDot' #斜划线
thick = 'thick' #粗线
thin = 'thin' #细线
这里的边框线其实也是一种线,那既然是线的设置,就和我们之前学过的折线图里面线的设置大同小异了,大家可以根据自己的需求选择合适的线形。
我们把边框线设置成点划线,实现代码如下:
sf.apply_column_style(cols_to_style=["col_1","col_2"],
styler_obj=Styler(border_type='dashDot'),
style_header=True)
ew = StyleFrame.ExcelWriter(r'my_excel.xlsx')
sf.to_excel(ew)
ew.save()
最后效果如下:
第四个是关于背景色的设计,即单元格填充颜色,关于单元格背景颜色使用的是bg_color
参数,单元格背景的可选颜色和字体颜色一致,这里不再赘述。
我们把col_1
列的单元格背景设置成绿色,col_2
列单元格背景设置成红色,实现代码如下:
sf.apply_column_style(cols_to_style=["col_1"],
styler_obj=Styler(bg_color='green'),
style_header=True)
sf.apply_column_style(cols_to_style=['col_2'],
styler_obj=Styler(bg_color='red'),
style_header=True)
ew = StyleFrame.ExcelWriter(r'my_excel.xlsx')
sf.to_excel(ew)
ew.save()
最后效果如下:
第五个是关于下划线设置,给字加下划线,关于下划线的设置使用的是underline
参数,主要有如下几种参数值(下划线类型)可选:
single = 'single' #单下划线
double = 'double' #双下划线
我们把整表全部加单下划线,实现代码如下:
sf.apply_column_style(cols_to_style=["col_1","col_2"],
styler_obj=Styler(underline='single'),
style_header=True)
ew = StyleFrame.ExcelWriter(r'my_excel.xlsx')
sf.to_excel(ew)
ew.save()
最后效果如下:
第六是字体大小的设置,字体大小的设置就比较简单了,直接给参数font_size
指明一个具体数字就行。如下,我们将第一列设置成20号字体,将第二列设置成12号字体。实现代码如下:
sf.apply_column_style(cols_to_style=["col_1"],
styler_obj=Styler(font_size=20),
style_header=True)
sf.apply_column_style(cols_to_style=["col_2"],
styler_obj=Styler(font_size=12),
style_header=True)
ew = StyleFrame.ExcelWriter(r'my_excel.xlsx')
sf.to_excel(ew)
ew.save()
最后效果如下:
第七个是字体是否加粗的设置,关于字体是否加粗使用的是bold
参数,如果要让字体加粗,另bold=True
,否则不设置即可。
我们将第儿列字体进行加粗,第一列不进行设置,实现代码如下:
sf.apply_column_style(cols_to_style=["col_2"],
styler_obj=Styler(bold=True),
style_header=True)
ew = StyleFrame.ExcelWriter(r'my_excel.xlsx')
sf.to_excel(ew)
ew.save()
最后效果如下:
关于字体相关的设置,我们就讲到这里,下一篇开始讲一些其他方面的设置,敬请期待。