【Python学习】利用xlwt设置Excel单元格格式

时间:2024-02-20 18:46:42

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种设置。

GroupAttributes
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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。