1. 程式人生 > >使用python建立excel表格 --- XlsxWriter模板詳解 ——轉載

使用python建立excel表格 --- XlsxWriter模板詳解 ——轉載

前言 :轉載自:http://blog.51cto.com/maoyao/1772102

       最近在研究自動化巡檢發郵件。因為是需要展現給領導看的,逼格當然得高,所以在郵件展現的地方需要用到excel模板,在網上查了下XlsxWriter的模板,發現還是挺強大的一個東西,能實現我所需要的高逼格:

       首先,XlsxWriter支援足夠多的樣式圖表,另外還支援函式,等各種DIY姿勢。不足地方在於只能建立excel,無法去修改讀取,只能是建立!

   

 

一、建立一個表格

      從輸出一個Hello world開始:

    

 

import xlsxwriter                                    #匯入模板
workbook = xlsxwriter.Workbook('hello.xlsx')         #建立一個名為 hello.xlsx 賦值給workbook
worksheet = workbook.add_worksheet()                 #建立一個預設工作簿 賦值給worksheet
                                                     #工作簿也支援命名,
                                                     #如:workbook.add_worksheet('hello')
                                                     
worksheet.write('A1', 'Hello world')                 #使用工作簿在 A1地方 寫入Hello world
workbook.close()                                     #關閉工作簿

  以上程式碼,最後一步關閉工作簿尤為重要,否則會出現報錯。

 

 批量寫入表格

 官網給出了一段批量寫入的程式碼,思路是這樣:

import xlsxwriter
workbook = xlsxwriter.Workbook('Expenses01.xlsx') 
worksheet = workbook.add_worksheet() 

#需要寫入的資料
 expenses = (     ['Rent',1000],       
                  ['Gas',  100],
                  ['Food', 300], 
                  ['Gym',   50],
)

#行跟列的初始位置
row = 0
col = 0

#.write方法  write(行,列,寫入的內容,樣式)
for item,cost in (expenses):
    worksheet.write(row,col,item)        #在第一列的地方寫入item
    worksheet.write(row,col+1,cost)      #在第二列的地方寫入cost
    row + 1                              #每次迴圈行數發生改變
    
worksheet.write(row,0,'Total')           
worksheet.write(row,1,'=SUM(B1:B4)')     #寫入公式

執行結果:

_images/tutorial01.png

 

二、表格樣式

  東西雖然寫出來了,但是光禿禿的,什麼都沒有,負分,滾回馬桶!使用樣式裝飾一下吧!

  表格樣式支援:字型、顏色、模式、邊框、數字格式等。

  表格樣式需要用到.add_format方法

  你可以直接將其封裝成一個類:

ItemStyle = workbook.add_format({
        'font_size':10,                 #字型大小
        'bold':True,                   #是否粗體
        'bg_color':'#101010',              #表格背景顏色
        'font_color':'#FEFEFE',             #字型顏色
        'align':'center',                #居中對齊
        'top':2,                     #上邊框 
                                                         #後面引數是線條寬度
        'left':2,                    #左邊框
        'right':2,                    #右邊框
        'bottom':2                    #底邊框
})

  你可以可以直接呼叫方法,像這樣:

ItemStyle.set_font_size(10)
ItemStyle.set_bold()
ItemStyle.set_bg_color('#101010')
ItemStyle.set_font_color('#FEFEFE')
ItemStyle.set_align('center')
ItemStyle.set_align('vcenter')
ItemStyle.set_bottom(2)
ItemStyle.set_top(2)
ItemStyle.set_left(2)
ItemStyle.set_right(2)

 兩個姿勢都是可以的,只要你喜歡。

 

 

 當然,樣式所支援的還是很多很多很多的,這裡沒辦法一一列舉,附上官網表:http://xlsxwriter.readthedocs.io/format.html  

 大致翻譯一下:

 

 

 

類別 描述 屬性 方法名
字型 字型 font_name set_font_name()
  字型大小 font_size

set_font_size()

  字型顏色 font_color set_font_color()
  加粗 bold set_bold()
  斜體 italic

set_italic()

  下劃線 underline set_underline()
  刪除線 font_strikeout set_font_strikeout()
  上標/下標 font_script set_font_script()
數字 數字格式 num_format set_num_format()
保護 表格鎖定 locked set_locked()
  隱藏公式 hidden set_hidden()
對齊 水平對齊 align set_align()
  垂直對齊 valign

set_align()

  旋轉 rotation set_rotation()
  文字包裝 text_wrap set_text_warp()
  底端對齊 text_justlast set_text_justlast()
  中心對齊 center_across set_center_across
  縮排 indent set_indent()
  縮小填充 shrink set_shrink()
模式 表格模式 pattern set_pattern()
  背景顏色 bg_color set_bg_color()
  前景顏色 fg_color set_fg_color()
邊框 表格邊框 border

set_border()

  底部邊框 bottom set_bottom()
  上邊框 top set_top()
  右邊框 right set_right()
  邊框顏色 border_color set_border_color()
  底部顏色 bottom_color set_bottom_color()
  頂部顏色 top_color set_top_color()
  左邊顏色 left_color set_left_color()
  右邊顏色 right_color set_right_color()

 

 

spacer.gif三、插入圖表

  圖表型別支援如下   

  • 區塊 :建立一個區塊(填充線)樣式表。

  • bar :建立一個bar風格(直方圖)圖。

  • 柱型 :建立一個列圖表(柱狀圖)。

  • 行 :建立一個橫行圖表。

  • 圓 :建立一個圓的圖表。

  • 圈 :建立一個圈一樣的圖表。

  • 散射 :建立一個散點圖風格。

  • 股票 :建立一個股票樣式表。

  • 雷達 :建立一個雷達樣式表

 每個一個型別都能細分一個子型別:

 

area
    stacked
    percent_stacked

bar
    stacked
    percent_stacked

column
    stacked
    percent_stacked

scatter
    straight_with_markers
    straight
    smooth_with_markers
    smooth

radar
    with_markers
    filled

如:建立一個疊加的柱型圖:

workbook.add_chart({'type': 'column', 'subtype': 'stacked'})

 示例:插入一個柱型圖

  插入圖表需要用到.add_chartsheet()方法,如下:

ColumnChart = workbook.add_chart({'type':'column'})  #定義一個柱型圖表 
ColumnChart.add_series({                             #定義樣式
    'name':'Value',                                #目標值的名    
    'categories':'=Sheet1!$A$1:$D$1',              #item的名
    'values':    '=Sheet1!$A$2:$D$2',            #item的值
    'fill':    {'color':'#FF9900'},              #柱子的顏色
})
ColumnChart.set_x_axis({                             #定義x軸
    'name':'The Number of Column Chart',           #標題
    'name_font':{'size':10},                       #字型
})
ColumnChart.set_y_axis({                             #定義y軸
    'name':'Server indexes',                       #標題
    'name_font':{'size':14,'bold':True},           #字型樣式
    'num_font':{'italic':True},                    #斜體
})
worksheet.insert_chart('A4',ColumnChart)             #將這個表格插入A4的地方

wKiom1cymzKQEqawAAExO9qekT8025.jpg

 

    示例:插入一個圓餅型圖

MemChart = workbook.add_chart({'type':'pie'})    #定義一個圓餅型圖表
MemChart.add_series({
    'categories':'=Sheet1!$A$20:$A$21',        #專案名
    'values':    '=Sheet1!$B$20:$B$21',      #值名
    'points':[
        {'fill':{'color':'#5ABAFE'}},        #第一個專案顏色
        {'fill':{'color':'#FE110E'}},        #第二個專案顏色
    ],
})
MemChart.set_title({'name':'Memory Usage'})      #設定標題
worksheet.insert_chart('A23',MemChart)           #插入圖表

執行結果:
wKioL1cyoNuwaBOuAACqUSeVzfo184.jpg

   當然樣式有相當多,上邊寫的只是一小部分,更多樣式參考

 官網圖表樣式:http://xlsxwriter.readthedocs.io/chart.html

(未完待續)...