天天看點

【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\')
           

此時運作代碼,生成的檔案如下所示

【Python學習】利用xlwt設定Excel單元格格式

能生成一個表格之後,我們開始來設定格式,包括設定字型、居中、邊框和背景。

設定格式

1、設定單元格背景

先說設定單元格背景,因為背景設定主要是顔色的設定。這個顔色的識别,是通用的。

我們在設定字型、單元格填充時,會進行顔色的設定。比如将字型設定成紅色,将單元格設定成黃色。在

xlwt

設定中,每一個顔色,都由相對應的數字表示。具體參照下圖,給大家分别展示了,當字型是白色或者黑色時,單元格顔色的顯示效果。

【Python學習】利用xlwt設定Excel單元格格式

顔色對應的序号,字型為白色

【Python學習】利用xlwt設定Excel單元格格式
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  # 給背景顔色指派    
           
  • 根據上圖可知, 代表

    黑色

    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

【Python學習】利用xlwt設定Excel單元格格式

我們對字型進行進一步設定,設定粗體、斜體、下劃線等

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 # 字型中是否有橫線
           

我們來看一下粗體、斜體和下劃線的效果。下劃線的顔色和粗細,是随着字型走的。字型粗體,下劃線也是粗體。

【Python學習】利用xlwt設定Excel單元格格式

下面是橫線效果

【Python學習】利用xlwt設定Excel單元格格式

3、位置設定

目前我隻會設定水準位置

有些文章說,通過

al.vert

可以設定垂直位置,我嘗試了沒效果

後續如果學會了,再來更新

alignment  = xlwt.Alignment()
    alignment .horz = 1      # 設定水準位置,0是左對齊,1是居中,2是右對齊
    # 設定自動換行
    alignment.wrap = 1
    style.alignment = alignment
           
【Python學習】利用xlwt設定Excel單元格格式

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 
           

效果如下

【Python學習】利用xlwt設定Excel單元格格式

實線邊框

【Python學習】利用xlwt設定Excel單元格格式

虛線邊框

還有一種,可以直接用數字表示

# 細實線: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
           

這邊展示了,不同數字對應的邊框樣式

【Python學習】利用xlwt設定Excel單元格格式

根據數字定義邊框

作者:洋陽1号

連結:https://www.jianshu.com/p/b7c387a84204

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。