网上那些培训机构最经常做的python宣传就是使用Python完成自动化excel办公,摆脱重复劳动力,我也没做这一方面的工作,但是在自动化测试的时候会用到excel进行记录测试数据,使用xlwt库进行写excel
有一次需要将记录的数据进行整理画成折线图,但是好像没找到使用xlwt来画图的操作,后面找到使用xlsxwriter库可以实现,所以下面将xlwt和xlsxwriter这两个库一并说明。
1.添加sheet
创建一个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.设置长宽
2.1 xlwt方式
设置每一列的宽度
import xlwt
if __name__ == '__main__':
excel_fd = xlwt.Workbook()
sheet_fd = excel_fd.add_sheet("test1") # 增加sheet
sheet_fd.col(0).width = 200 * 40 # 设置第1列列宽
sheet_fd.col(1).width = 200 * 15 # 设置第2列列宽
sheet_fd.col(2).width = 200 * 15 # 设置第3列列宽
excel_fd.save("./test.xls") # 保存xls
xlwt暂时没有用来设置行的高度,不过可以用font,样式里面的字体大小属性来实现行高度的修改
2.2 xlsxwriter方式
xlsxwriter库对于设置列的宽度和行的高度都是可以设置的,就是单位不一样。
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) # 设置第1列宽度
sheet_fd.set_column(1, 1, 20) # 设置第2列宽度
sheet_fd.set_column(2, 2, 30) # 设置第3列宽度
sheet_fd.set_row(0, 10) # 设置第1行高度
sheet_fd.set_row(1, 20) # 设置第2行高度
sheet_fd.set_row(2, 30) # 设置第3行高度
excel_fd.close()
设置列的时候是使用set_column
函数,第一个和第二个参数为从起始列和结束列,而设置行的时候是使用set_rom
就一个行数的参数。
3.设置字体颜色、大小、边框、背景颜色、居中
设置字体的颜色,大小等参数是制作表格的基本要素,不然做出来的表格就没有情感了,所以这边介绍几个常用的要素。
3.1 xlwt方式
xlwt里面的Font样式接口可是实现上面这些功能熟悉,这边封装了一个set_style函数用来调用
第一个参数为字体颜色,第二个参数为字体大小,第三个参数为字体是否加粗,第四个参数为背景颜色,第五个参数为是否居中。
当然还有很多别的属性,需要自己去扩展。
def set_style(font_color, height, bold=False, pattern_color='', align='center'):
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = 'Times New Roman'
font.bold = bold
font.height = height
font.colour_index = font_color
borders = xlwt.Borders() # 为样式创建边框
borders.left = 0
borders.right = 0
borders.top = 0
borders.bottom = 0
alignment = xlwt.Alignment() # 设置排列
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进行写输入,第一个参数为行,第二个参数为列,第三个参数为输入的内容,后面的style就可以调用上面分装好的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 # 设置第1列列宽
sheet_fd.col(1).width = 200 * 15 # 设置第2列列宽
sheet_fd.col(2).width = 200 * 15 # 设置第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的接口来设置字体格式,参数的填写格式会有一些不一样,但是大同小异,如下:
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方式
- 参数1和2:起始row和起始col
- 参数3和4:结束row和结束col
- 参数5:内容
- 参数6:style样式
sheet_fd.write_merge(3, 3, 4, 4, "merge", set_style(0x7FFF, 320, bold=True))
4.2 xlsxwriter方式
与xlwt方式一样,内容如下:
- 参数1和2:起始row和起始col
- 参数3和4:结束row和结束col
- 参数5:内容
- 参数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({ # 给图表设置格式,填充内容
'marker': {'type': 'diamond'},
'name': ['test1', 1, 0],
'categories': ['test1', 1, 0, 4, 0],
'values': ['test1', 1, 1, 4, 1], # 从第几行到第几行的内容(test1为sheet表)
})
sheet_fd.insert_chart(1, 2, chart_fd)
excel_fd.close()
网友评论