前言 :转载自:http://blog.51cto.com/maoyao/1772102
最近在研究自动化巡检发邮件。因为是需要展现给领导看的,逼格当然得高,所以在邮件展现的地方需要用到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_name | set_font_name() |
字体大小 | font_size | set_font_size() | |
字体颜色 | font_color | set_font_color() | |
加粗 | bold | set_bold() | |
斜体 | italic | set_italic() | |
下划线 | underline | set_underline() | |
删除线 | font_strikeout | set_font_strikeout() | |
上标/下标 | font_script | set_font_script() | |
数字 | 数字格式 | num_format | set_num_format() |
保护 | 表格锁定 | locked | set_locked() |
隐藏公式 | hidden | set_hidden() | |
对齐 | 水平对齐 | align | set_align() |
垂直对齐 | valign | set_align() | |
旋转 | rotation | set_rotation() | |
文本包装 | text_wrap | set_text_warp() | |
底端对齐 | text_justlast | set_text_justlast() | |
中心对齐 | center_across | set_center_across | |
缩进 | indent | set_indent() | |
缩小填充 | shrink | set_shrink() | |
模式 | 表格模式 | pattern | set_pattern() |
背景颜色 | bg_color | set_bg_color() | |
前景颜色 | fg_color | set_fg_color() | |
边框 | 表格边框 | border | set_border() |
底部边框 | bottom | set_bottom() | |
上边框 | top | set_top() | |
右边框 | right | set_right() | |
边框颜色 | border_color | set_border_color() | |
底部颜色 | bottom_color | set_bottom_color() | |
顶部颜色 | top_color | set_top_color() | |
左边颜色 | left_color | set_left_color() | |
右边颜色 | right_color | set_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
(未完待续)...