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