【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種設置。

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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM