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


    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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:gtea 博客地址:https://www.cnblogs.com/gtea
  • 相关阅读:
    笨方法学python笔记
    Orchard CMS 单点解决方案(SSO)及两种身份认证模块的介绍
    Orchard Oauth身份认证模块,在原基础上支持百度,豆瓣,开心,QQ,人人,新浪,淘宝
    凉鞋
    第一天
    网络编程vc++、socket机制
    定时器
    界面的多语言切换/通过读取xml文件实现
    svn快速教程
    文件读写
  • 原文地址:https://www.cnblogs.com/gtea/p/12752626.html
Copyright © 2020-2023  润新知