PythonXlsxWriter業務流量週報表指令碼(轉載)

sktj發表於2018-01-19

一、使用XlsxWriter模組生成Excel表格

安裝XlsxWriter模組

pip2.7 install xlsxwriter

官網:http://xlsxwriter.readthedocs.org/

常用方法說明:

Workbook(filename [ options ])用於建立一個workbook物件

建立一個Excel檔案

workbook = xlsxwriter.Workbook(`chart.xlsx`)

add_worksheet(sheetname)用於新增一個工作表,空號中可以指定工作表名稱,預設為Sheet1

建立一個工作表物件

worksheet = workbook.add_worksheet()

add_format([properties]) 用於建立一個新的格式物件,引數[properties]為指定一個格式屬性的字典如:

bold = workbook.add_format( { `bold` : True } )

也可以通過Format methods完成格式的設定如:

bold = workbook.add_format()

bold.set_bold( )

worksheet.write(row,column,`data`) 用於寫入資料到指定位置的單元格row,column,座標索引的起始位置為0

如果用座標表示位置的話比如(2,0) 就是 (A3);

這就是表示在A1位置寫入`hello`

worksheet.write( 0 , 0 `hello` )

set_row ( row,height,cell_format,options ) 用於設定行單元格的屬性,row為指定位置,height設定行高單位畫素,cell_format指定定義好的格式物件呼叫,options設定行hidden(隱藏)、level(組合分級)、collapsed(摺疊)操作示例如下:

設定第1行單元格高度為40畫素,並呼叫格式cell_format 。

worksheet.set_row( 0,40,cell_format )

隱藏第2行單元格

worksheet.set_row(1,None,None,{ `hidden`: True })

set_column(first_col,last_col,width,cell_format,options) 用於設定一列或多列單元格屬性

bold = workbook.add_format( { `bold` : True } )

設定0到1(即A到B)列單元格寬度為10畫素,並呼叫加粗格式。

worksheet.set_column( 0,1,bold )

設定C到D列單元格寬度為20畫素

worksheet.set_column( C:D,20 )

隱藏E到G列單元格

worksheet.set_column( E:G,None,None,{ `hidden` : 1} )

insert_image(row,col,image,[options]) 用於插入圖片到指定的單元格

插入圖片指定圖片超連結

worksheet.insert_image(`B5`,` img/he.jpg `,{`url`:`http://python.org`} )

add_chart(type:圖表型別) 用於建立圖表物件

圖表樣式:area面積樣式、bar條形樣式、column柱形樣式、line線條樣式、pie餅圖樣式、scatter散點樣式、stock股票樣式、radar雷達樣式;

建立一個column柱形圖表

chart = workbook.add_chart({ type,`column` })

在A5單元格插入圖表

worksheet.insert_chart( `A5`,chart )

chart.add_series( )用於新增一個資料系列到圖表

常用的三個選項:categories作為設定圖表類別標籤範圍,values為設定圖示資料範圍,line為設定圖表線條屬性。

chart.add_series({

`categories` : `=Sheet1!$A$1:$A$5`,

`values` : `=Sheet1!$B$1:$B$5`,

`line` : { `color` : `red` },

})

定製自動化業務流量報表週報

訂製網站5個頻道的流量報表週報,通過XlsxWriter模組將流量資料寫入Excel文件,同時自動計算各頻道周平均流量,再生成資料包表。

#!/usr/local/python27/bin/python2.7

#coding: utf-8

import sys

reload``(sys)

sys.setdefaultencoding(```utf-8```) ``#用於解決windows轉linux出現的編碼問題

import xlsxwriter

workbook ``= xlsxwriter.Workbook(```chart.xlsx```)

worksheet ``= workbook.add_worksheet()

#建立圖表物件,定義圖表型別。

chart ``= workbook.add_chart({```type```:```column```})

title ``= [```業務名稱```,```星期一```,```星期二```,```星期三```,```星期四```,```星期五```,```星期六```,```星期日```,```平均流量```]

buname ``= [```業務官網```,```新聞中心```,```購物頻道```,```體育頻道```,```親子頻道```]

data ``= [

[``150``,``152``,``158``,``149``,``155``,``145``,``148``],

[``89``,``88``,``95``,``93``,``98``,``100``,``99``],

[``201``,``200``,``198``,``175``,``170``,``198``,``195``],

[``75``,``77``,``78``,``78``,``74``,``70``,``79``],

[``88``,``85``,``87``,``90``,``93``,``88``,``84``],

]

format = workbook.add_format() ``#定義格式,用於在部分單元格呼叫

format``.set_border(``1``)

format_title ``= workbook.add_format()

format_title.set_border(``1``)

format_title.set_bg_color(```#cccccc```)

format_ave ``= workbook.add_format()

format_ave.set_border(``1``)

format_ave.set_num_format(```0.00```)

#使用行寫入第一行業務名稱及標題

worksheet.write_row(```A1```,title,format_title)

#使用列寫入從第一列的第二行開始寫入頻道標題

worksheet.write_column(```A2```,buname,``format``)

#從B2開始寫入資料項

worksheet.write_row(```B2```,data[``0``],``format``)

worksheet.write_row(```B3```,data[``1``],``format``)

worksheet.write_row(```B4```,data[``2``],``format``)

worksheet.write_row(```B5```,data[``3``],``format``)

worksheet.write_row(```B6```,data[``4``],``format``)

#定義圖表資料系列函式

def chart_series(cur_row):

#這裡是在求周平均值,I當前行的資料 = B:H當前行的值相加再求平均

worksheet.write_formula(```I```+``cur_row, ```= AVERAGE(B```+``cur_row``+```:H```+``cur_row``+```)```,format_ave)

chart.add_series({

#這裡是在工作表Sheet1中指定該圖表類別的標籤範圍,從B1到H1,就是取了週一到週日。

`categories```: ```=Sheet1!$B$1:$H$1```,

#這裡是設定圖表資料的範圍,從B當前資料行到H當前資料行。

`values```: ```=Sheet1!$B$```+``cur_row``+```:$H$```+``cur_row,

`line` : {```color```:```black```},

#引用了業務名稱為圖列項

`name` : ```=Sheet1!$A$```+``cur_row,

})

for row ``in range``(``2``,``7``):

chart_series(``str``(row))

#定義圖表樣式,每一個值都是一個不一樣的樣式。

chart.set_style(``2``)

#定義圖表的大小

chart.set_size({```width```:``577``,```height```:``287``})

#設定圖表上方的大標題

chart.set_title({```name```:```業務流量週報圖```})

#設定圖表y軸的小標題

chart.set_y_axis({```name```:```Mb/s```})

#插入圖表到A8的位置

worksheet.insert_chart(```A8```,chart)

workbook.close()

|


相關文章