xlwt介绍和安装
xlwt
是Python中操作Excel的一个库,可以将数据保存成Excel
API Reference:https://xlwt.readthedocs.io/en/latest/api.html#xlwt.Style.easyxf
PyPI:https://pypi.org/project/xlwt-fix/
pip install xlwt
在保存之前,可以设置单元格的属性,官网提供了以下6种设置。
Group | Attributes |
---|---|
Number format | Number format index (index to FORMAT record) |
Font | Font index (index to FONT record) |
Alignment | Horizontal and vertical alignment, text wrap, indentation, orientation/rotation, text direction |
Border | Border line styles and colours |
Background | Background area style and colours |
Protection | Cell locked, formula hidden |
此文介绍其中4种:
- Font:字体设置
- Alignment:对准设置
- Border:边框设置
- Background:背景设置
文中所有代码链接:https://github.com/yangyang0126/PythonLearning/tree/master/Python实践/数据可视化/xlwt
创建表格
创建一个表格的流程
- 定义workbook
- 添加sheet
- 创建一个样式对象style,设置格式(这一步可以省略,出来就是默认格式)
- 给表格赋值
- 保存表格
我们首先创建一个最简单的表格,不做任何格式,内容就是从0-71的数字。
import xlwt
# 定义workbook
workbook = xlwt.Workbook()
# 添加sheet,这个sheet的名字叫\'Style\'
sheet = workbook.add_sheet(\'Style\')
# 写入数据
row = 0 # 行
column = 0 # 列
for i in range(72):
sheet.write(row, column, i) # 写入数据,第row行,第column列,具体内容是i
column += 1
if column > 8:
column = 0
row += 1
# 定义保存Excel的位置和文件名。默认是和代码存在一个路劲下面。
workbook.save(\'CreatExcelTable.xls\')
此时运行代码,生成的文件如下所示
能生成一个表格之后,我们开始来设置格式,包括设置字体、居中、边框和背景。
设置格式
1、设置单元格背景
先说设置单元格背景,因为背景设置主要是颜色的设置。这个颜色的识别,是通用的。
我们在设置字体、单元格填充时,会进行颜色的设置。比如将字体设置成红色,将单元格设置成黄色。在xlwt
设置中,每一个颜色,都由相对应的数字表示。具体参照下图,给大家分别展示了,当字体是白色或者黑色时,单元格颜色的显示效果。
1 # coding:utf-8 2 import patterns as patterns 3 import xlwt 4 import time 5 i = 0 6 book = xlwt.Workbook(encoding=\'utf-8\') 7 sheet = book.add_sheet(\'sheet1\', cell_overwrite_ok=True) 8 # 如果出现报错:Exception: Attempt to overwrite cell: sheetname=\'sheet1\' rowx=0 colx=0 9 # 需要加上:cell_overwrite_ok=True) 10 # 这是因为重复操作一个单元格导致的 11 12 while i < 64: 13 # 为样式创建字体 14 font = xlwt.Font() 15 16 # 字体类型 17 font.name = \'name Times New Roman\' 18 # 字体颜色 19 font.colour_index = i 20 # 字体大小,11为字号,20为衡量单位 21 font.height = 20*11 22 # 字体加粗 23 font.bold = False 24 # 下划线 25 font.underline = True 26 # 斜体字 27 font.italic = True 28 29 # 设置单元格对齐方式 30 alignment = xlwt.Alignment() 31 # 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐) 32 alignment.horz = 0x02 33 # 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐) 34 alignment.vert = 0x01 35 36 # 设置自动换行 37 alignment.wrap = 1 38 39 # 设置边框 40 borders = xlwt.Borders() 41 # 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7 42 # 大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13 43 borders.left = 1 44 borders.right = 2 45 borders.top = 3 46 borders.bottom = 4 47 borders.left_colour = i 48 borders.right_colour = i 49 borders.top_colour = i 50 borders.bottom_colour = i 51 52 # 设置列宽,一个中文等于两个英文等于两个字符,11为字符数,256为衡量单位 53 sheet.col(1).width = 11 * 256 54 55 # 设置背景颜色 56 pattern = xlwt.Pattern() 57 # 设置背景颜色的模式 58 pattern.pattern = xlwt.Pattern.SOLID_PATTERN 59 # 背景颜色 60 pattern.pattern_fore_colour = i 61 62 # 初始化样式 63 style0 = xlwt.XFStyle() 64 style0.font = font 65 66 style1 = xlwt.XFStyle() 67 style1.pattern = pattern 68 69 style2 = xlwt.XFStyle() 70 style2.alignment = alignment 71 72 style3 = xlwt.XFStyle() 73 style3.borders = borders 74 75 # 设置文字模式 76 font.num_format_str = \'#,##0.00\' 77 78 sheet.write(i, 0, u\'字体\', style0) 79 sheet.write(i, 1, u\'背景\', style1) 80 sheet.write(i, 2, u\'对齐方式\', style2) 81 sheet.write(i, 3, u\'边框\', style3) 82 83 # 合并单元格,合并第2行到第4行的第4列到第5列 84 sheet.write_merge(2, 4, 4, 5, u\'合并\') 85 i = i + 1 86 87 book.save(\'E:/test/testfile/test_file\'+time.strftime("%Y%m%d%H%M%S")+\'.xls\')
设置表格格式,我们首先要先定义一个样式
# 创建一个样式对象,初始化样式 style
style = xlwt.XFStyle()
接着进行背景设置
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
pattern.pattern_fore_colour = 4 # 给背景颜色赋值
- 根据上图可知,
0
代表黑色
,1
代表白色
,2
代表红色
,以此类推。后续所有涉及颜色的操作,都以此数字代表。 - 颜色参照上面的规则,比如,4,对应的是,深蓝色
设置好之后,把这个背景,应用到刚刚的 style
上面去
style.pattern = pattern # 把背景颜色加到表格样式里去
最后,在赋值的时候,把格式带上
sheet.write(row, column, i) # 不带格式
sheet.write(row, column, i, style) # 有格式
2、设置字体格式
与上述一致,我们先要先定义一个样式
# 创建一个样式对象,初始化样式 style
style = xlwt.XFStyle()
接着进行字体设置
# 为样式创建字体
font = xlwt.Font()
font.name = \'Calibri\' # 设置字体
font.colour_index = 4 # 设置字体颜色
font.height = 400 # 字体大小
- 字体大家可以任选,和Excel里面字体的名字匹配就可以
- 颜色参照上面的规则,比如,4,对应的是,深蓝色
- 字体大小也看大家心情啦
设置好之后,把这个字体,应用到刚刚的 style
上面去
style.font = font
最后,在赋值的时候,把格式带上
sheet.write(row, column, i) # 不带格式
sheet.write(row, column, i, style) # 有格式
完整代码
import xlwt
workbook = xlwt.Workbook()
sheet = workbook.add_sheet(\'Font\')
# 创建一个样式对象,初始化样式 style
style = xlwt.XFStyle()
# 为样式创建字体
font = xlwt.Font()
font.name = \'Calibri\' # 设置字体
font.colour_index = 4 # 设置字体颜色
font.height = 400 # 字体大小
# 定义格式-字体
style.font = font
# 写入数据
row = 0 # 行
column = 0 # 列
for i in range(72):
sheet.write(row, column, i, style) # 增加样式
if column > 8:
column = 0
row += 1
workbook.save(\'Font.xls\')
此时效果如下图所示,字体是Calibri
,颜色是蓝色
,字体大小是400
我们对字体进行进一步设置,设置粗体、斜体、下划线等
font.name = \'Times New Roman\' # 设置字体
font.color_index = color # 设置字体颜色
font.height = 400 # 字体大小
font.bold = True # 字体是否为粗体
font.italic = True # 字体是否为斜体
font.underline = True # 字体是否有下划线
font.struck_out =True # 字体中是否有横线
我们来看一下粗体、斜体和下划线的效果。下划线的颜色和粗细,是随着字体走的。字体粗体,下划线也是粗体。
下面是横线效果
3、位置设置
目前我只会设置水平位置
有些文章说,通过al.vert
可以设置垂直位置,我尝试了没效果
后续如果学会了,再来更新
alignment = xlwt.Alignment()
alignment .horz = 1 # 设置水平位置,0是左对齐,1是居中,2是右对齐
# 设置自动换行
alignment.wrap = 1
style.alignment = alignment
4、边框设置
# 设置边框
borders = xlwt.Borders() # Create Borders
# DASHED虚线
# NO_LINE没有
# THIN实线
borders.left = xlwt.Borders.DASHED
borders.right = xlwt.Borders.DASHED
borders.top = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DASHED
borders.left_colour = color
borders.right_colour = color
borders.top_colour = color
borders.bottom_colour = color
style.borders = borders
边框颜色随意,这个不多说了。讲一下边框的线条。
有两种定义方式,一种是用DASHED、THIN来表示
# DASHED虚线
# NO_LINE没有
# THIN实线
borders.left = xlwt.Borders.DASHED
borders.right = xlwt.Borders.DASHED
borders.top = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DASHED
效果如下
还有一种,可以直接用数字表示
# 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
# 大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13
borders.left = 1
borders.right = 2
borders.top = 3
borders.bottom = 4
这边展示了,不同数字对应的边框样式
作者:洋阳1号
链接:https://www.jianshu.com/p/b7c387a84204
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。