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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容