用python處理Excel文件(2)——用xlsxwriter模組寫xls/xlsx文件
阿新 • • 發佈:2019-01-24
本文主要總結一下如何使用xlsxwriter模組來自動化生成和處理Excel文件。
簡單用法demo
# !/usr/bin/python
# coding:utf-8
# xlsxwriter的基本用法
import xlsxwriter
# 1. 建立一個Excel檔案
workbook = xlsxwriter.Workbook('demo1.xlsx')
# 2. 建立一個工作表sheet物件
worksheet = workbook.add_worksheet()
# 3. 設定第一列(A)寬度為20畫素
worksheet.set_column('A:A',20)
# 4. 定義一個加粗的格式物件
bold = workbook.add_format({'bold':True})
# 5. 向單元格寫入資料
# 5.1 向A1單元格寫入'Hello'
worksheet.write('A1','Hello')
# 5.2 向A2單元格寫入'World'並使用bold加粗格式
worksheet.write('A2','World',bold)
# 5.3 向B2單元格寫入中文並使用加粗格式
worksheet.write('B2',u'中文字元',bold)
# 5.4 用行列表示法(行列索引都從0開始)向第2行、第0列(即A3單元格)和第3行、第0列(即A4單元格)寫入數字
worksheet.write(2 ,0,10)
worksheet.write(3,0,20)
# 5.5 求A3、A4單元格的和並寫入A5單元格,由此可見可以直接使用公式
worksheet.write(4,0,'=SUM(A3:A4)')
# 5.6 在B5單元格插入圖片
worksheet.insert_image('B5','./demo.png')
# 5.7 關閉並儲存檔案
workbook.close()
執行之後生成的Excel文件效果如下:
綜合例項demo:繪製網站業務流量資料圖表
#!/usr/bin/python
# coding:utf-8
import xlsxwriter
# 建立一個Excel檔案
workbook = xlsxwriter.Workbook('chart.xlsx')
# 建立一個工作表sheet物件,使用預設名稱:"Sheet1"
worksheet = workbook.add_worksheet()
# 建立一個圖表物件
chart = workbook.add_chart({'type':'column'})
# 定義資料表頭
title = [u'業務名稱',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平均流量']
# 定義業務名稱列表
buname = [u'業務官網',u'新聞中心',u'購物頻道',u'體育頻道',u'親子頻道']
# 定義5個頻道一週七天的資料列表
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]
]
# 定義資料formatter格式物件,設定邊框加粗1畫素
formatter = workbook.add_format()
formatter.set_border(1)
# 定義標題欄格式物件:邊框加粗1畫素,背景色為灰色,單元格內容居中、加粗
title_formatter = workbook.add_format()
title_formatter.set_border(1)
title_formatter.set_bg_color('#cccccc')
title_formatter.set_align('center')
title_formatter.set_bold()
# 定義平均值欄資料格式物件:邊框加粗1畫素,數字按2位小數顯示
ave_formatter = workbook.add_format()
ave_formatter.set_border(1)
ave_formatter.set_num_format('0.00')
# 定義圖表資料系列函式
def chart_series(cur_row):
chart.add_series({
'categories':'=Sheet1!$B$1:$H$1',
'values':'=Sheet1!$B${}:$H${}'.format(cur_row,cur_row),
'line':{'color':'black'},
'name':'=Sheet1!$A${}'.format(cur_row)
})
# 注:其中categories表示x軸,values表示y軸,line表示線條樣式,name表示圖例項
# 下面分別以行和列的方式將標題欄、業務名稱、流量資料寫入單元格,並引用不同的格式物件
worksheet.write_row('A1',title,title_formatter)
worksheet.write_column('A2',buname,formatter)
# 寫入第2到第6行的資料,並將第2~6行資料加入圖表系列
for i in range(2,7):
worksheet.write_row('B{}'.format(i),data[i-2],formatter)
# 計算平均流量欄資料並寫入
worksheet.write_formula('I{}'.format(i),'=AVERAGE(B{}:H{})'.format(i,i),ave_formatter)
# 將每一行資料加入圖表序列
chart_series(str(i))
# 設定圖表大小
chart.set_size({'width':577,'height':287})
# 設定圖表大標題
chart.set_title({'name':u'業務流量週報表'})
# 設定y軸小標題
chart.set_y_axis({'name':'Mb/s'})
# 在A8單元格插入圖表
worksheet.insert_chart('A8',chart)
# 關閉Excel文件
workbook.close()
執行之後生成的Excel文件效果如下: