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