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 # 給背景顔色指派
- 根據上圖可知, 代表
,黑色
代表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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。