Python 操作 Excle 數(shù)據(jù)表:數(shù)據(jù)寫(xiě)入
上節(jié)課我們學(xué)習(xí)了使用 Python 的 xlrd 模塊對(duì) Excel 表格進(jìn)行數(shù)據(jù)讀取,但是我們?cè)谄綍r(shí)的工作過(guò)程中,除了對(duì)數(shù)據(jù)進(jìn)行讀取操作外,還以后另外一項(xiàng)非常重要的內(nèi)容就是數(shù)據(jù)的寫(xiě)入。
向 Excel 中寫(xiě)入數(shù)據(jù)的應(yīng)用場(chǎng)景也是非常廣泛。如數(shù)據(jù)清洗后數(shù)據(jù)的存儲(chǔ)寫(xiě)入或多個(gè) Excel 數(shù)據(jù)合并新文件生成等等。既然有專(zhuān)門(mén)讀取數(shù)據(jù)的 xlrd 模塊,自然也有專(zhuān)門(mén)進(jìn)行數(shù)據(jù)寫(xiě)入的 xlwt 模塊。
本小節(jié)我們就來(lái)學(xué)習(xí)下 Python 第三方庫(kù) xlwt 完成對(duì) Excel 的寫(xiě)入。
1. xlwt 模塊介紹
xlwt 是一個(gè)向 Excel 文件(.xls)寫(xiě)入信息庫(kù)。支持 excel03 版到 excel2013 版,保存的格式只支持 xls 格式,07 以后的版本 xlsx 不支持。
通過(guò)本小節(jié)的學(xué)習(xí),我們最終要完成工作簿 “2019-CNY.xls” 的創(chuàng)建,其中包含兩個(gè)工作表,分別為 “CNY” 與 “image”,兩個(gè)工作表中具體內(nèi)容如下圖所示。
1.1 安裝
xlwt 是 Python 的第三方庫(kù),使用前需要通過(guò)以下命令進(jìn)行安裝:
pip install xlwt
1.2 使用步驟
步驟 1:導(dǎo)入 xlwt 模塊
通過(guò) import xlwt 完成導(dǎo)入。
import xlwt
步驟 2:創(chuàng)建工作簿
import xlwt
wb = xlwt.Workbook()
步驟 3:創(chuàng)建工作表
import xlwt
wb = xlwt.Workbook() # 創(chuàng)建一個(gè)工作簿對(duì)象
ws = wb.add_sheet("sheet1") # 使用工作簿對(duì)象創(chuàng)建一個(gè)工作表,名稱(chēng)為 sheet1
步驟 4:向工作表中寫(xiě)入數(shù)據(jù)
根據(jù) xlwt 提供的方法,完成工作表(sheet)中數(shù)據(jù)的寫(xiě)入,以及包括樣式的設(shè)置等操作。
步驟 5:生成 Excel 文件
import xlwt
wb = xlwt.Workbook()
...省略部分代碼
wb.save("data.xls") # 保存并生成 Excel 文件
通過(guò) save () 方法進(jìn)行保存,生成 Excel 文件,save () 方法也可以傳入你想要保存到的文件路徑。到這里就完成了新的工作簿創(chuàng)建和數(shù)據(jù)寫(xiě)入的操作。
2. xlwt 寫(xiě)入 Excel
接下來(lái),針對(duì) xlwt 提供的常用寫(xiě)入方法進(jìn)行講解,這里根據(jù)寫(xiě)入內(nèi)容的類(lèi)型進(jìn)行劃分。
2.1 寫(xiě)入文本
寫(xiě)入文本常用方法,見(jiàn)下表。
屬性 | 描述 |
---|---|
write(r, c, label, style) | 將指定單元格寫(xiě)入工作表 |
write_merge(r1, r2, c1, c2, label, style) | 將指定合并單元格寫(xiě)入工作表 |
具體方法使用,如下所示:
ws = wb.add_sheet("sheet1")
ws.write(3,0,"張三")
如何確定要填入的單元格位置呢?
工作表中的行和列索引均為從 0 開(kāi)始,即行索引為 1,表示第 2 行,列索引為 2,表示第三列。起始位置從工作表中左上角位置。
通過(guò)上述代碼,可以得知在創(chuàng)建的 sheet 1 下,第 4 行第 1 列的位置寫(xiě)入了 "張三"。
ws = wb.add_sheet("sheet1")
ws.write_merge(0, 1, 0, 5, "班級(jí)學(xué)員名單", titlestyle)
通過(guò)上述代碼,可以得知在創(chuàng)建的 sheet1 下,第 1 行,第 1-5 列做了單元格合并,里面填寫(xiě)標(biāo)題內(nèi)容,且應(yīng)用 titlestyle 樣式(關(guān)于樣式如何定義在下面小節(jié)中詳細(xì)說(shuō)明)。
2.2 寫(xiě)入圖片
寫(xiě)入圖片常用方法,見(jiàn)下表。
方法 | 參數(shù) | 描述 |
---|---|---|
insert_bitmap(filename, row, col, x = 0, y = 0, scale_x = 1, scale_y = 1) | 其中 filename 為文件名,row 為行索引,col 為列索引,x 為水平方向偏移位置,y 為垂直方向偏移位置,scale_x 與 scale_y 為縮放比例,默認(rèn) 1,即按 1:1 行展示 | 在指定位置插入圖片 |
對(duì)應(yīng)代碼中訪(fǎng)問(wèn),如下所示:
ws = wb.add_sheet("sheet1")
ws.insert_bitmap("user1.bmp", 0, 0)
通過(guò)上述代碼,可以得知在創(chuàng)建的 sheet1 下,第 1 行第 1 列的位置插入了 user1.bmp 圖片。
3. xlwt 格式設(shè)置
xlwt 除數(shù)據(jù)寫(xiě)入外,還可以單元格格式設(shè)置和單元格樣式設(shè)置,一共分為 6 組,包括數(shù)字格式、字體、對(duì)齊方式、邊框、填充、保護(hù)。使用步驟如下:
步驟 1:初始化樣式
import xlwt
titlestyle = xlwt.XFStyle() # 初始化 XFStyle 對(duì)象
步驟 2:配置樣式
根據(jù)提供的屬性進(jìn)行單元格樣式設(shè)置,如字體、邊框、對(duì)齊方式設(shè)置等。
步驟 3:應(yīng)用樣式
import xlwt
titlestyle = xlwt.XFStyle() # 初始化XFStyle對(duì)象
...省略部分代碼
ws = wb.add_sheet("sheet1")
ws.write_merge(0, 1, 0, 5, "班級(jí)學(xué)員名單", titlestyle) #應(yīng)用樣式
創(chuàng)建和配置好的 XFStyle 對(duì)象需要與寫(xiě)入方法結(jié)合使用,如上述代碼中,將創(chuàng)建好的 titlestyle 應(yīng)用到了標(biāo)題上。
xlwt 中常用格式屬性分組,見(jiàn)下表。
分組 | 描述 |
---|---|
Font | 關(guān)于字體相關(guān)設(shè)置,如字號(hào)、字體、加粗等 |
Alignment | 水平和垂直對(duì)齊,文本換行,縮進(jìn),方向 / 旋轉(zhuǎn),文本方向 |
Borders | 邊框線(xiàn)條樣式和顏色 |
Pattern | 背景區(qū)域樣式和顏色 |
下面我們針對(duì)每一項(xiàng)的使用進(jìn)行單獨(dú)介紹。
3.1 Font 字體
Font 字體中常用屬性,見(jiàn)下表。
屬性 | 描述 |
---|---|
name | 字體名稱(chēng) |
bold | 字體是否 jiac |
height | 字號(hào) |
colour_index | 字體顏色 |
對(duì)應(yīng)代碼中訪(fǎng)問(wèn),如下所示:
titlestyle = xlwt.XFStyle() # 初始化樣式
titlefont = xlwt.Font()
titlefont.name = "宋體"
titlefont.bold = True # 加粗
titlefont.height = 11*20 # 字號(hào)
titlefont.colour_index = 0x08 # 字體顏色
titlestyle.font = titlefont
使用時(shí),首先通過(guò) xlwt.Font 進(jìn)行初始化,完成字體配置后,將對(duì)象賦值給 XFStyle。
Tips:上述代碼中顏色代碼不是 RGB 的六位顏色代碼,而是 xlwt 內(nèi)部的一套代碼。具體可以參考 xlwt.Styles 中 _colour_map_text 的數(shù)據(jù)。
xlwt.Styles 中 _colour_map_text 的數(shù)據(jù)如下:
aqua 0x31 black 0x08 blue 0x0C
blue_gray 0x36 bright_green 0x0B brown 0x3C
coral 0x1D cyan_ega 0x0F dark_blue 0x12
dark_blue_ega 0x12 dark_green 0x3A dark_green_ega 0x11
dark_purple 0x1C dark_red 0x10 dark_red_ega 0x10
dark_teal 0x38 dark_yellow 0x13 gold 0x33
gray_ega 0x17 gray25 0x16 gray40 0x37
gray50 0x17 gray80 0x3F green 0x11
ice_blue 0x1F indigo 0x3E ivory 0x1A
lavender 0x2E light_blue 0x30 light_green 0x2A
light_orange 0x34 light_turquoise 0x29 light_yellow 0x2B
lime 0x32 magenta_ega 0x0E ocean_blue 0x1E
olive_ega 0x13 olive_green 0x3B orange 0x35
pale_blue 0x2C periwinkle 0x18 pink 0x0E
plum 0x3D purple_ega 0x14 red 0x0A
rose 0x2D sea_green 0x39 silver_ega 0x16
sky_blue 0x28 tan 0x2F teal 0x15
teal_ega 0x15 turquoise 0x0F violet 0x14
white 0x09 yellow 0x0D
3.2 Alignment 對(duì)齊方式
對(duì)齊方式常用屬性,見(jiàn)下表。
屬性 | 描述 |
---|---|
horz | 水平方向?qū)R |
vert | 垂直方向?qū)R |
對(duì)應(yīng)代碼中訪(fǎng)問(wèn),如下所示:
cellalign = xlwt.Alignment()
cellalign.horz = 0x02
cellalign.vert = 0x01
titlestyle.alignment = cellalign
使用時(shí),首先通過(guò) xlwt.Alignment 進(jìn)行初始化,完成配置后,將對(duì)象賦值給 XFStyle。
水平方向?qū)R取值范圍:
- 0x01 (左端對(duì)齊);
- 0x02 (水平方向上居中對(duì)齊);
- 0x03 (右端對(duì)齊);
垂直方向?qū)R取值范圍:
- 0x00 (上端對(duì)齊);
- 0x01 (垂直方向上居中對(duì)齊);
- 0x02 (底端對(duì)齊)。
3.3 Borders 邊框
邊框樣式常用屬性,見(jiàn)下表。
屬性 | 描述 |
---|---|
top | 上邊框 |
right | 右邊框 |
bottom | 下邊框 |
let | 左邊框 |
對(duì)應(yīng)代碼中訪(fǎng)問(wèn),如下所示:
borders = xlwt.Borders()
borders.right = xlwt.Borders.DASHED #虛線(xiàn)
borders.bottom = xlwt.Borders.DOTTED #點(diǎn)線(xiàn)
titlestyle.borders = borders
使用時(shí),首先通過(guò) xlwt.Borders 進(jìn)行初始化,完成邊框樣式配置后,將對(duì)象賦值給 XFStyle。上述代碼即設(shè)置單元格右側(cè)邊框?yàn)樘摼€(xiàn),設(shè)置單元格下邊框?yàn)辄c(diǎn)線(xiàn)。
3.4 Pattern 填充
填充常用屬性,見(jiàn)下表。
屬性 | 描述 |
---|---|
pattern | 設(shè)置背景顏色的模式 |
pattern_fore_colour | 背景顏色 |
對(duì)應(yīng)代碼中訪(fǎng)問(wèn),如下所示:
datestyle = xlwt.XFStyle()
bgcolor = xlwt.Pattern()
bgcolor.pattern=xlwt.Pattern.SOLID_PATTERN
bgcolor.pattern_fore_colour=22 #背景顏色
datestyle.pattern=bgcolor
上述代碼中,首先通過(guò) xlwt.Pattern 進(jìn)行初始化,為單元格設(shè)置填充背景顏色樣式,其中 xlwt.Pattern 為填充背景顏色的模式,SOLID_PATTERN 表示完全填充。完成配置后,將對(duì)象賦值給 XFStyle。
4. 小結(jié)
本節(jié)課程我們主要學(xué)習(xí)了 xlwt 模塊的使用。本節(jié)課程的重點(diǎn)如下:
- 了解 xlwt 模塊作用及使用步驟;
- 掌握 xlwt 模塊中寫(xiě)入文本、圖片的使用方法;
- 掌握 xlwt 模塊中格式化單元格樣式常用屬性與方法。