4-python库之-xlwt或xlsxwriter excel表格操作

网上那些培训机构最经常做的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()

参考
https://www.cnblogs.com/brightbrother/p/8671077.html

发布了106 篇原创文章 · 获赞 76 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Creator_Ly/article/details/104479320