Python:利用xlwt設(shè)置Excel單元格格式

xlwt介紹和安裝

xlwt是Python中操作Excel的一個庫扇救,可以將數(shù)據(jù)保存成Excel
API Reference:https://xlwt.readthedocs.io/en/latest/api.html#xlwt.Style.easyxf
PyPI:https://pypi.org/project/xlwt-fix/

pip install xlwt

在保存之前统刮,可以設(shè)置單元格的屬性,官網(wǎng)提供了以下6種設(shè)置。

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:字體設(shè)置
  • Alignment:對準(zhǔn)設(shè)置
  • Border:邊框設(shè)置
  • Background:背景設(shè)置

文中所有代碼鏈接:https://github.com/yangyang0126/PythonLearning/tree/master/Python實踐/數(shù)據(jù)可視化/xlwt

創(chuàng)建表格

創(chuàng)建一個表格的流程

  • 定義workbook
  • 添加sheet
  • 創(chuàng)建一個樣式對象style柒昏,設(shè)置格式(這一步可以省略,出來就是默認(rèn)格式)
  • 給表格賦值
  • 保存表格

我們首先創(chuàng)建一個最簡單的表格,不做任何格式漏设,內(nèi)容就是從0-71的數(shù)字。

import xlwt

# 定義workbook
workbook = xlwt.Workbook() 

# 添加sheet今妄,這個sheet的名字叫'Style'
sheet = workbook.add_sheet('Style')  

# 寫入數(shù)據(jù)
row = 0 # 行
column = 0 # 列
for i in range(72):    
    sheet.write(row, column, i) # 寫入數(shù)據(jù)郑口,第row行鸳碧,第column列,具體內(nèi)容是i
    column += 1
    if column > 8:
        column = 0
        row += 1
        
# 定義保存Excel的位置和文件名犬性。默認(rèn)是和代碼存在一個路勁下面瞻离。
workbook.save('CreatExcelTable.xls')

此時運行代碼,生成的文件如下所示

能生成一個表格之后乒裆,我們開始來設(shè)置格式套利,包括設(shè)置字體、居中缸兔、邊框和背景日裙。

設(shè)置格式

1、設(shè)置單元格背景

先說設(shè)置單元格背景惰蜜,因為背景設(shè)置主要是顏色的設(shè)置昂拂。這個顏色的識別,是通用的抛猖。
我們在設(shè)置字體格侯、單元格填充時,會進(jìn)行顏色的設(shè)置财著。比如將字體設(shè)置成紅色联四,將單元格設(shè)置成黃色。在xlwt設(shè)置中撑教,每一個顏色朝墩,都由相對應(yīng)的數(shù)字表示。具體參照下圖伟姐,給大家分別展示了收苏,當(dāng)字體是白色或者黑色時,單元格顏色的顯示效果愤兵。

顏色對應(yīng)的序號鹿霸,字體為白色
顏色對應(yīng)的序號,字體為黑色

設(shè)置表格格式秆乳,我們首先要先定義一個樣式

# 創(chuàng)建一個樣式對象懦鼠,初始化樣式 style
style = xlwt.XFStyle()  

接著進(jìn)行背景設(shè)置

pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
pattern.pattern_fore_colour = 4  # 給背景顏色賦值    
  • 根據(jù)上圖可知,0代表黑色屹堰,1代表白色肛冶,2代表紅色,以此類推扯键。后續(xù)所有涉及顏色的操作淑趾,都以此數(shù)字代表。
  • 顏色參照上面的規(guī)則忧陪,比如扣泊,4近范,對應(yīng)的是,深藍(lán)色

設(shè)置好之后延蟹,把這個背景评矩,應(yīng)用到剛剛的 style 上面去

style.pattern = pattern  # 把背景顏色加到表格樣式里去

最后,在賦值的時候阱飘,把格式帶上

sheet.write(row, column, i)  # 不帶格式
sheet.write(row, column, i, style)  # 有格式

2斥杜、設(shè)置字體格式

與上述一致,我們先要先定義一個樣式

# 創(chuàng)建一個樣式對象沥匈,初始化樣式 style
style = xlwt.XFStyle()  

接著進(jìn)行字體設(shè)置

# 為樣式創(chuàng)建字體
font = xlwt.Font()  
font.name = 'Calibri' # 設(shè)置字體
font.colour_index = 4 # 設(shè)置字體顏色
font.height = 400 # 字體大小
  • 字體大家可以任選蔗喂,和Excel里面字體的名字匹配就可以
  • 顏色參照上面的規(guī)則,比如高帖,4缰儿,對應(yīng)的是,深藍(lán)色
  • 字體大小也看大家心情啦

設(shè)置好之后散址,把這個字體乖阵,應(yīng)用到剛剛的 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')  

# 創(chuàng)建一個樣式對象瞪浸,初始化樣式 style
style = xlwt.XFStyle()  

# 為樣式創(chuàng)建字體
font = xlwt.Font()  
font.name = 'Calibri' # 設(shè)置字體
font.colour_index = 4 # 設(shè)置字體顏色
font.height = 400 # 字體大小

# 定義格式-字體
style.font = font

# 寫入數(shù)據(jù)
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吏祸,顏色是藍(lán)色对蒲,字體大小是400

我們對字體進(jìn)行進(jìn)一步設(shè)置,設(shè)置粗體贡翘、斜體蹈矮、下劃線等

    font.name = 'Times New Roman' # 設(shè)置字體    
    font.color_index = color # 設(shè)置字體顏色
    font.height = 400 # 字體大小    
    font.bold = True # 字體是否為粗體    
    font.italic = True # 字體是否為斜體    
    font.underline = True # 字體是否有下劃線    
    font.struck_out =True # 字體中是否有橫線

我們來看一下粗體、斜體和下劃線的效果床估。下劃線的顏色和粗細(xì),是隨著字體走的诱渤。字體粗體丐巫,下劃線也是粗體。

下面是橫線效果

3勺美、位置設(shè)置

目前我只會設(shè)置水平位置
有些文章說递胧,通過al.vert可以設(shè)置垂直位置,我嘗試了沒效果
后續(xù)如果學(xué)會了赡茸,再來更新

    alignment  = xlwt.Alignment()
    alignment .horz = 1      # 設(shè)置水平位置缎脾,0是左對齊,1是居中占卧,2是右對齊
    # 設(shè)置自動換行
    alignment.wrap = 1
    style.alignment = alignment

4遗菠、邊框設(shè)置

    # 設(shè)置邊框
    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 

效果如下

實線邊框
虛線邊框

還有一種贺拣,可以直接用數(shù)字表示

    # 細(xì)實線:1蓖谢,小粗實線:2,細(xì)虛線:3譬涡,中細(xì)虛線:4闪幽,大粗實線:5,雙線:6涡匀,細(xì)點虛線:7
    # 大粗虛線:8盯腌,細(xì)點劃線:9,粗點劃線:10渊跋,細(xì)雙點劃線:11腊嗡,粗雙點劃線:12,斜點劃線:13
    borders.left = 1
    borders.right = 2
    borders.top = 3
    borders.bottom = 4

這邊展示了拾酝,不同數(shù)字對應(yīng)的邊框樣式

根據(jù)數(shù)字定義邊框

最后

目前關(guān)于xlwt的學(xué)習(xí)燕少,就差不多這樣。后續(xù)學(xué)了更多東西蒿囤,再來補充~~

參考網(wǎng)址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末官边,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子外遇,更是在濱河造成了極大的恐慌注簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跳仿,死亡現(xiàn)場離奇詭異诡渴,居然都是意外死亡,警方通過查閱死者的電腦和手機菲语,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門妄辩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惑灵,“玉大人,你說我怎么就攤上這事恩袱∑澹” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵畔塔,是天一觀的道長潭辈。 經(jīng)常有香客問我,道長澈吨,這世上最難降的妖魔是什么把敢? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮谅辣,結(jié)果婚禮上修赞,老公的妹妹穿的比我還像新娘。我一直安慰自己桑阶,他們只是感情好柏副,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚣录,像睡著了一般割择。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萎河,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天荔泳,我揣著相機與錄音,去河邊找鬼虐杯。 笑死玛歌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的擎椰。 我是一名探鬼主播支子,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼达舒!你這毒婦竟也來了值朋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤休弃,失蹤者是張志新(化名)和其女友劉穎吞歼,沒想到半個月后圈膏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塔猾,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年稽坤,在試婚紗的時候發(fā)現(xiàn)自己被綠了丈甸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糯俗。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖睦擂,靈堂內(nèi)的尸體忽然破棺而出得湘,到底是詐尸還是另有隱情,我是刑警寧澤顿仇,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布淘正,位于F島的核電站,受9級特大地震影響臼闻,放射性物質(zhì)發(fā)生泄漏鸿吆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一述呐、第九天 我趴在偏房一處隱蔽的房頂上張望惩淳。 院中可真熱鬧,春花似錦乓搬、人聲如沸思犁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽激蹲。三九已至,卻和暖如春坷澡,著一層夾襖步出監(jiān)牢的瞬間托呕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工频敛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留项郊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓斟赚,卻偏偏與公主長得像着降,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拗军,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349