網(wǎng)上那些培訓機構(gòu)最經(jīng)常做的python宣傳就是使用Python完成自動化excel辦公,擺脫重復(fù)勞動力,我也沒做這一方面的工作,但是在自動化測試的時候會用到excel進行記錄測試數(shù)據(jù),使用xlwt庫進行寫excel
有一次需要將記錄的數(shù)據(jù)進行整理畫成折線圖,但是好像沒找到使用xlwt來畫圖的操作,后面找到使用xlsxwriter庫可以實現(xiàn),所以下面將xlwt和xlsxwriter這兩個庫一并說明。
1.添加sheet
創(chuàng)建一個excel文件,并添加一個sheet表單
1.1 xlwt方式
import xlwt
if __name__ == '__main__':
excel_fd = xlwt.Workbook()
sheet_fd = excel_fd.add_sheet("test1") # 增加sheet
excel_fd.save("./test.xls") # 保存xls
1.2 xlsxwriter方式
import xlsxwriter
if __name__ == '__main__':
excel_fd = xlsxwriter.Workbook("test.xlsx")
sheet_fd = excel_fd.add_worksheet("test1")
excel_fd.close()
2.設(shè)置長寬
2.1 xlwt方式
設(shè)置每一列的寬度
import xlwt
if __name__ == '__main__':
excel_fd = xlwt.Workbook()
sheet_fd = excel_fd.add_sheet("test1") # 增加sheet
sheet_fd.col(0).width = 200 * 40 # 設(shè)置第1列列寬
sheet_fd.col(1).width = 200 * 15 # 設(shè)置第2列列寬
sheet_fd.col(2).width = 200 * 15 # 設(shè)置第3列列寬
excel_fd.save("./test.xls") # 保存xls
xlwt暫時沒有用來設(shè)置行的高度,不過可以用font,樣式里面的字體大小屬性來實現(xiàn)行高度的修改
2.2 xlsxwriter方式
xlsxwriter庫對于設(shè)置列的寬度和行的高度都是可以設(shè)置的,就是單位不一樣。
import xlsxwriter
if __name__ == '__main__':
excel_fd = xlsxwriter.Workbook("test.xlsx")
sheet_fd = excel_fd.add_worksheet("test1")
sheet_fd.set_column(0, 0, 10) # 設(shè)置第1列寬度
sheet_fd.set_column(1, 1, 20) # 設(shè)置第2列寬度
sheet_fd.set_column(2, 2, 30) # 設(shè)置第3列寬度
sheet_fd.set_row(0, 10) # 設(shè)置第1行高度
sheet_fd.set_row(1, 20) # 設(shè)置第2行高度
sheet_fd.set_row(2, 30) # 設(shè)置第3行高度
excel_fd.close()
設(shè)置列的時候是使用set_column函數(shù),第一個和第二個參數(shù)為從起始列和結(jié)束列,而設(shè)置行的時候是使用set_rom就一個行數(shù)的參數(shù)。
3.設(shè)置字體顏色、大小、邊框、背景顏色、居中
設(shè)置字體的顏色,大小等參數(shù)是制作表格的基本要素,不然做出來的表格就沒有情感了,所以這邊介紹幾個常用的要素。
3.1 xlwt方式
xlwt里面的Font樣式接口可是實現(xiàn)上面這些功能熟悉,這邊封裝了一個set_style函數(shù)用來調(diào)用
第一個參數(shù)為字體顏色,第二個參數(shù)為字體大小,第三個參數(shù)為字體是否加粗,第四個參數(shù)為背景顏色,第五個參數(shù)為是否居中。
當然還有很多別的屬性,需要自己去擴展。
def set_style(font_color, height, bold=False, pattern_color='', align='center'):
style = xlwt.XFStyle() # 初始化樣式
font = xlwt.Font() # 為樣式創(chuàng)建字體
font.name = 'Times New Roman'
font.bold = bold
font.height = height
font.colour_index = font_color
borders = xlwt.Borders() # 為樣式創(chuàng)建邊框
borders.left = 0
borders.right = 0
borders.top = 0
borders.bottom = 0
alignment = xlwt.Alignment() # 設(shè)置排列
if align == 'center':
alignment.horz = xlwt.Alignment.HORZ_CENTER
alignment.vert = xlwt.Alignment.VERT_CENTER
else:
alignment.horz = xlwt.Alignment.HORZ_LEFT
alignment.vert = xlwt.Alignment.VERT_BOTTOM
if pattern_color != '':
pattern = xlwt.Pattern() # 一個實例化的樣式類
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 固定的樣式
pattern.pattern_fore_colour = xlwt.Style.colour_map[pattern_color] # 背景顏色
style.pattern = pattern
style.font = font
style.borders = borders
style.alignment = alignment
return style
如下例子,使用write進行寫輸入,第一個參數(shù)為行,第二個參數(shù)為列,第三個參數(shù)為輸入的內(nèi)容,后面的style就可以調(diào)用上面分裝好的set_style接口,
import xlwt
RED = 0x0A
GREEN = 0x11
BLACK = 0X7FFF
if __name__ == '__main__':
excel_fd = xlwt.Workbook()
sheet_fd = excel_fd.add_sheet("test1") # 增加sheet
sheet_fd.col(0).width = 200 * 40 # 設(shè)置第1列列寬
sheet_fd.col(1).width = 200 * 15 # 設(shè)置第2列列寬
sheet_fd.col(2).width = 200 * 15 # 設(shè)置第3列列寬
sheet_fd.write(0, 0, "test1",
style=set_style(RED, 260, bold=True, align='', pattern_color='light_orange'))
sheet_fd.write(0, 1, "test2",
style=set_style(GREEN, 260, bold=False, align='', pattern_color='gray25'))
sheet_fd.write(1, 2, "test3",
style=set_style(BLACK, 460, bold=True, align='center'))
excel_fd.save("./test.xls") # 保存xls
3.2 xlsxwriter方式
與xlwt方式類似,不過在xlsxwriter里面使用的是call_format這種稱呼。
我們也按上面那種方式分裝一個set_format的接口來設(shè)置字體格式,參數(shù)的填寫格式會有一些不一樣,但是大同小異,如下:
import xlsxwriter
def set_format(excel_fd, font_color, height, bold=False, pattern_color='', align='center'):
style = excel_fd.add_format({
"fg_color": pattern_color, # 單元格的背景顏色
"bold": bold, # 字體加粗
"align": align, # 對齊方式
"font_color": font_color, # 字體顏色
"font_size": height # 字體顏色
})
return style
if __name__ == '__main__':
excel_fd = xlsxwriter.Workbook("test.xlsx")
sheet_fd = excel_fd.add_worksheet("test1")
sheet_fd.write(0, 0, "test1",
set_format(excel_fd, "red", 20, bold=True, align='', pattern_color='light_orange'))
sheet_fd.write(0, 1, "test2",
set_format(excel_fd, "green", 30, bold=False, align='', pattern_color='gray25'))
sheet_fd.write(1, 2, "test3",
set_format(excel_fd, "black", 40, bold=True, align='center'))
excel_fd.close()
4.合并單元格
在做表頭的時候會將幾個單元格合并成一個
4.1 xlwt方式
- 參數(shù)1和2:起始row和起始col
- 參數(shù)3和4:結(jié)束row和結(jié)束col
- 參數(shù)5:內(nèi)容
- 參數(shù)6:style樣式
sheet_fd.write_merge(3, 3, 4, 4, "merge", set_style(0x7FFF, 320, bold=True))
4.2 xlsxwriter方式
與xlwt方式一樣,內(nèi)容如下:
- 參數(shù)1和2:起始row和起始col
- 參數(shù)3和4:結(jié)束row和結(jié)束col
- 參數(shù)5:內(nèi)容
- 參數(shù)6:cell_format樣式
sheet_fd.merge_range(3, 3, 4, 4, "merge", set_format(0x7FFF, 320, bold=True))
5.畫折線圖
畫折線圖這邊只有xlsxwriter的方式
import xlsxwriter
if __name__ == '__main__':
excel_fd = xlsxwriter.Workbook("test.xlsx")
sheet_fd = excel_fd.add_worksheet("test1")
sheet_fd.write(0, 0, "X")
sheet_fd.write(1, 0, 1)
sheet_fd.write(2, 0, 2)
sheet_fd.write(3, 0, 3)
sheet_fd.write(4, 0, 4)
sheet_fd.write(0, 1, "Y")
sheet_fd.write(1, 1, 4)
sheet_fd.write(2, 1, 5)
sheet_fd.write(3, 1, 5)
sheet_fd.write(4, 1, 3)
chart_fd = excel_fd.add_chart({'type': 'line'}) # 添加折線圖
chart_fd.set_title({'name': 'XY'}) # 添加圖標名字
chart_fd.set_x_axis({'name': '=' + 'test1' + '!$A$1'}) # 添加X名字(test1為sheet表)
chart_fd.set_y_axis({'name': '=' + 'test1' + '!$B$1'}) # 添加Y名字(test1為sheet表)
chart_fd.add_series({ # 給圖表設(shè)置格式,填充內(nèi)容
'marker': {'type': 'diamond'},
'name': ['test1', 1, 0],
'categories': ['test1', 1, 0, 4, 0],
'values': ['test1', 1, 1, 4, 1], # 從第幾行到第幾行的內(nèi)容(test1為sheet表)
})
sheet_fd.insert_chart(1, 2, chart_fd)
excel_fd.close()