文/劉衛(wèi)華 史婷婷 許學(xué)添
Python是一種以“優(yōu)雅、明確、簡單”為設(shè)計(jì)理念的計(jì)算機(jī)程序設(shè)計(jì)語言,而Excel則是Windows平臺(tái)下應(yīng)用最為廣泛的電子表格處理軟件。在過去,對(duì)于很多Excel應(yīng)用人員來說,處理繁雜且數(shù)量眾多的電子表格數(shù)據(jù)是一項(xiàng)既麻煩,又費(fèi)時(shí)的問題,但隨著Python的第三方庫與Excel表格進(jìn)行結(jié)合應(yīng)用以后,這個(gè)問題便被完美的解決,很多工作人員只需要打幾行代碼便可以輕松完成工作。而在Python的第三方庫中,pyExcelerator與xlrd就是用來操作Excel文件的第三方類庫模塊,本文也將圍繞著這兩種類庫模塊在Excel中的應(yīng)用進(jìn)行詳細(xì)介紹說明。
pyExcelerator是在Python的所有第三方類庫中主要應(yīng)用于Excel文件的類庫,pyExcelerator不僅可以完全支持UNICODE,還支持各種格式設(shè)置,也正是基于此,其才能對(duì)Excel文件實(shí)施各種操作。在實(shí)際操作中,pyExcelerator的Workbook和Worksheet會(huì)分別對(duì)應(yīng)Excel的Book和Sheet,但實(shí)際上一個(gè)Workbook可能會(huì)包含多個(gè)Worksheet,這也使得很多時(shí)候pyExcelerator與Excel的文件之間會(huì)出現(xiàn)互相不對(duì)應(yīng)的情況,出現(xiàn)讀取困難問題。而且因?yàn)閜yExcelerator不會(huì)提供Excel表格的各種諸如行數(shù)、列數(shù)等關(guān)鍵數(shù)值的訪問接口,也不支持對(duì)空數(shù)據(jù)的處理,所以pyExcelerator類庫不太適合用于對(duì)Excel的寫入處理。
xlrd雖然同pyExcelerator一樣,都是Python的第三方類庫,并且都是主要用于處理Excel表格,但相比較pyExcelerator來說,xlrd的讀取操作更加便捷簡單,但有優(yōu)點(diǎn)便會(huì)有缺點(diǎn),xlrd雖然讀取速度和方式更加方便快捷,卻不能對(duì)Excel表格實(shí)施寫入操作,所以在進(jìn)行Excel表寫入的時(shí)候,還是需要用pyExcelerator的。
因?yàn)閤lrd在讀取Excel文件上更具有優(yōu)勢,所以本文便主要在Excel讀取中應(yīng)用xlrd類庫來進(jìn)行。
xlrd在進(jìn)行Excel文件讀取時(shí),可以快速的通過讀取文件來得到其內(nèi)部的表格內(nèi)容,然后在通過讀取表格內(nèi)容讀取單元格與單元格內(nèi)的內(nèi)容,不需要再對(duì)單元格的值進(jìn)行重復(fù)讀取,并且可以通過對(duì)表格的行數(shù)和列數(shù)來對(duì)表格實(shí)施遍歷讀取,進(jìn)而獲取整個(gè)表格的所有數(shù)據(jù)。
一般來說,一個(gè)Excel表格在新建完成后都至少會(huì)有三張表:分別是sheet1、sheet2、sheet3。假如sheet2中的B2、B3、B4有內(nèi)容,那么用xlrd模塊讀取Excel的代碼如下:
import xlrd #導(dǎo)入擴(kuò)展包
data=xlrd.open_workbook('book.xls') #打開Excel文件讀取數(shù)據(jù)
table=data.sheet_by_index(2) #通過索引順序獲取第二個(gè)工作表
nrows=table.nrows
ncols=table.ncols #獲取行數(shù)和列
ctype,value,xf
table.cell(i,j) #單元格的值
因?yàn)閤lrd模塊不支持Excel文件的寫入修改操作,所以在進(jìn)行Excel寫入應(yīng)用中,本文主要是采用pyExcelerator模塊來進(jìn)行。首先用Workbook定義一個(gè)Excel文件,然后再次使用Workbook定義Excel文件中的一頁,最后再執(zhí)行寫入流程,具體代碼如下:
coding=utf-8 #定義字體
from pyExcelerator import *#導(dǎo)入模塊
w=Workbook() #生成工作簿
ws=w.add_sheet(’你好')#將第一個(gè)工作表改名為你好
ws.write(i,j,value)#插入單元格
ws.write(2,2,'你好',style0)#在工作表的B2單元格中寫入內(nèi)容“你好”
w.save(‘你好.xls’)#保存文件,名為你好
使用pyExcelerator對(duì)Excel表格的列寬代碼如下:
coding=utf-8
frompyExcelerator import *
w=Workbook()
ws=w.add_sheet(’你好')
ws.write(1,1,’你好’)
Ws.col(1).width=80 #返回第colnum列的對(duì)象,并通過調(diào)整width屬性來改變此列對(duì)象的寬度
w.save(‘你好.xls’)
使用pyExcelerator模塊來對(duì)Excel表格進(jìn)行操作,不僅可以用來建立Excel表格,并對(duì)其內(nèi)部的內(nèi)容屬性實(shí)施修改,還可以改變Excel表格的每一個(gè)邊框?qū)傩赃M(jìn)行設(shè)置,這個(gè)修改是通過pyExcelerator模塊中的borders對(duì)象來完成的,具體代碼如下:
borders=Borders()
borders.left=borders.DOUBLE #設(shè)置左邊框?yàn)殡p線
borders.right=borders.DOUBLE #設(shè)置右邊框?yàn)殡p線
borders.top=borders.NO_LINE #設(shè)置上邊框不顯示邊框線
borders.bottom=borders.NO_LINE #設(shè)置下邊框不顯示邊框線
borders.diag=borders。DOUBLE #設(shè)置對(duì)角線
borders.top_colour=#ff0000 #設(shè)置上邊框顏色
borders.diag_colour=#ff0000 #設(shè)置對(duì)角線顏色
style=XFStyle()
style.borders=borders
w=Workbook()
ws.write=w.add_sheet(’你好’)
ws.write(i,j,value)
w.save(’你好.xls’)
與設(shè)置單元格邊框有所不同,設(shè)置單元格的底紋所使用的卻是pyExcelerator模塊中的pattern對(duì)象,這個(gè)對(duì)象可以有效的設(shè)置單元格底紋的各種屬性,包括有pattern(圖案索引)、pattern_fore_colour(前景色)、pattern_back_color(背景色),具體設(shè)置代碼如下:
pattern=Pattern()
pattern.pattern=0 設(shè)置單元格底紋為圖片索引
pattern.pattern_fore_colour=#ff0000設(shè)置底紋前景色
pattern.pattern_back_color=#ff0000設(shè)置底紋背景色
style=XFStyle()
style.pattern=pattern
w=Workbook()
ws.write=w.add_sheet(’你好’)
ws.write(i,j,value)
w.save(’你好.xls’)
通過Python第三方庫來對(duì)Excel電子表格進(jìn)行操作,不僅可以簡化相關(guān)工作人員的工作強(qiáng)度,還有利于對(duì)其實(shí)施二次編輯或者操作,特別是針對(duì)一些系統(tǒng)自動(dòng)生成導(dǎo)出的文件來說,應(yīng)用Python第三方庫更是可以實(shí)現(xiàn)“自動(dòng)完成”和“自動(dòng)更新”,從而有效提升企業(yè)對(duì)數(shù)據(jù)的處理效率,提升企業(yè)的工作效率。因此,對(duì)如今的各大企業(yè)來說,通過Python第三方庫來操作Excel表格,在數(shù)據(jù)處理工作中具有極大的價(jià)值與作用,值得推廣分享。