您的位置:首页 > 编程语言 > Python开发

使用python创建excel表格 --- XlsxWriter模板详解

2016-05-11 11:02 826 查看
前言
最近在研究自动化巡检发邮件。因为是需要展现给领导看的,逼格当然得高,所以在邮件展现的地方需要用到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)')     #写入公式
运行结果:



二、表格样式
东西虽然写出来了,但是光秃秃的,什么都没有,负分,滚回马桶!使用样式装饰一下吧!
表格样式支持:字体、颜色、模式、边框、数字格式等。
表格样式需要用到.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_nameset_font_name()
字体大小font_sizeset_font_size()
字体颜色font_colorset_font_color()
加粗boldset_bold()
斜体italicset_italic()
下划线underlineset_underline()
删除线font_strikeoutset_font_strikeout()
上标/下标font_scriptset_font_script()
数字数字格式num_formatset_num_format()
保护表格锁定lockedset_locked()
隐藏公式hiddenset_hidden()
对齐水平对齐alignset_align()
垂直对齐valignset_align()
旋转rotationset_rotation()
文本包装text_wrapset_text_warp()
底端对齐text_justlastset_text_justlast()
中心对齐center_acrossset_center_across
缩进indentset_indent()
缩小填充shrinkset_shrink()
模式
表格模式
patternset_pattern()
背景颜色bg_colorset_bg_color()
前景颜色fg_colorset_fg_color()
边框表格边框borderset_border()
底部边框bottomset_bottom()
上边框topset_top()
右边框rightset_right()
边框颜色border_colorset_border_color()
底部颜色bottom_colorset_bottom_color()
顶部颜色top_colorset_top_color()
左边颜色left_colorset_left_color()
右边颜色right_colorset_right_color()

三、插入图表
图表类型支持如下
区块
:创建一个区块(填充线)样式表。

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的地方




示例:插入一个圆饼型图
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)           #插入图表
运行结果:


当然样式有相当多,上边写的只是一小部分,更多样式参考

官网图表样式:http://xlsxwriter.readthedocs.io/chart.html
(未完待续)...
本文出自 “猫妖的博客” 博客,请务必保留此出处http://maoyao.blog.51cto.com/8253780/1772102
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: