1. 程式人生 > >用python處理Excel文件(2)——用xlsxwriter模組寫xls/xlsx文件

用python處理Excel文件(2)——用xlsxwriter模組寫xls/xlsx文件

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