xlrd
■ xlrd
xlrd模塊用於讀取excel文件內容
基本用法:
workbook = xlrd.open_workbook('文件路徑') workbook.sheet_names() #返回所有sheet的列表 workbook.sheet_by_index(...) #通過index來獲得一個sheet對象,index從0開始算起 workbook.sheet_by_name(...) #根據sheet名獲得相應的那個sheet對象
在得到sheet對象之后,就可以用它的一些方法和變量來獲取數據:
sheet.name sheet的名字
sheet.nrows sheet的行數
sheet.ncols sheet的列數
sheet.get_rows() 返回一個迭代器,遍歷所有行,給出每個行的值列表
sheet.row_values(index) 返回某一行的值列表
sheet.row(index) 返回一個row對象,可以通過row[index]來獲取這行里的單元格cell對象
sheet.col_values(index) 返回某一列的值列表
sheet.cell(row,col) 獲取一個cell對象(row和col都從0開始算)
上面提到的cell對象就是一個單元格的抽象,cell對象有value變量來獲取其值。 *value都是以unicode的形式存儲的,如果內容是中文,記得要encode一下
要獲得特定的cell對象的值有多種方法,如
sheet.cell(x,y).value
sheet.cell_value(x,y)
sheet.row(x)[y].value
除了value變量外,cell還有一些其他的變量和方法:
.ctype 返回該單元格數據類型的代碼(0表示空,1表示string,2表示number,3表示date,4表示boolean,5表示error)。當ctype == 3 時,雖是日期,但那時python是按照float來處理的,需要用xldate_as_tuple方法來將其轉化為日期格式,這個方法的用法就是xlrd.xldate_as_tuple(xldate,datemode), xldate表示一個ctype是3的一個值,datemode是屬於workbook的一個屬性。
*關於讀取合並單元格
在默認情況中,合並單元格只在最左上角的子單元格可以讀取到值,其他都是空的。為了解決此問題,在open_workbook時加上參數formatting_info = True (這個只支持excel97-03的xls文件)
這樣,sheet.merged_cells會返回當前表中所有合並單元格的信息,格式是像[(7,8,2,5),(1,3,4,5)...]這樣的一個列表。其中每一項都是一個單元格,比如(7,8,2,5)的意思是這個sheet中的第七行的第2-4行合並,和序列的分片操作一樣,是算頭不算尾,所以7,8是指合並的僅第七行(這個7不是index而是index+1),2,5則表示第二列到第四列,不包括第五列。這個“不算尾”的做法是區別於xlwt模塊中的合並單元格處理的。
這么一來,想要知道某個合並單元格的值信息的話,只要關注每個元組的第一項和第三項就行了。
xlwt
xlwt用於寫入excel,基本創建方法和xlrd類似:
wk = xlwt.Workbook() st = wk.add_sheet('sheetname') st.write(x,y,...,style) #意思是將內容...寫入index為(x,y)的單元格內,style可以自定義,詳情見下文 st.write(x,x+m,y,y+n,...,style) #可以直接寫入一個合並單元格,x為開始的row的index,x+m是結束的row的index,y類似。注意:這里是包括x+m行的,和xlrd讀取合並單元格設定不一樣 ''' 經試驗,發現似乎並不能直接寫入一個合並單元格,比較好的做法是首先調用merge方法合並出一個單元格,然后寫入數據到合並單元格的最左上角的子單元格 ''' wk.save('路徑') #保存文件
*關於style 可以單獨定義一個def_style函數來統一處理
比如:
def def_style(): style = xlwt.XFStyle()
##########這部分設置字體######### font = xlwt.Font() font.name = 'Times New Roman' #或者換成外面傳進來的參數,這樣可以使一個函數定義所有style font.bold = 'True' font.height = '...' font.size = '...' font.colour_index('...') style.font = font
########這部分設置居中格式####### alignment = xlwt.Alignment() alignment.horz = xlwt.Alignment.HORZ_CENTER #水平居中 alignment.vert = xlwt.Alignment.VERT_CENTER #垂直居中 style.alignment = alignment
#########還可以添加幾個設置顏色,邊框的部分##########
return style ####################################### #核心意思是指,要通過這個函數來設置一些style的屬性 #比如字體,居中格式等等 #最終再返回一個style #######################################
#這樣在寫入的時候就可以通過def_style()來返回一個style對象,來設置style了
xlwt.write(0,0,'test',def_style())
*單元格大小並不會根據內容的大小和多少自動調整,要通過
sheet.row(x).height = ...
sheet.col(x).width = ...
來調整單元格大小
*若要設置cell的背景色,邊框等可以設置style的其他屬性,比如
背景色要設置 style.pattern,如:
ptn = xlwt.Pattern()
ptn.pattern = xlwt.Pattern.SOLID_PATTERN
ptn.pattern_fore_colour = 顏色代碼 //注意這個顏色代碼不是RGB的六位顏色代碼,而是xlwt內部的一套代碼。具體可以參考xlwt.Styles中一些類似叫做color_map的數據,下表作參考:
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
style.pattern = ptn
border = xlwt.Borders()
border.left = xlwt.Borders.THICK
border.top/right/bottom等等