$用python處理Excel文檔(2)——用xlsxwriter模塊寫xls/xlsx文檔


Refer:《python自動化運維:技術與最佳實踐》

更多用法參考xlsxwriter官方文檔:http://xlsxwriter.readthedocs.io/

本文主要總結一下如何使用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文檔效果如下:
這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM