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

網(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()

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容