python common development operation and maintenance module (8) EXCEL operation module XlsxWriter

1.excel Introduction

Excel is the most popular spreadsheet software, supports rich computing functions and charts, in terms of operating system widely used for operational data reporting, such as service quality, resource utilization, security scanning, reporting, but also the application of common file system export format for the use of personnel for further data processing. This section describes the use of Excel operation XlsxWriter Python module (https://xlsxwriter.readthedocs.org), you can operate a plurality of sheets of text, numbers, formulas, charts and the like. XlsxWriter module has the following features: * 100% compatible Excel XLSX files, support for Excel 2003, Excel 2007 version and so on; · Supports all Excel cell data format; · cells merge, annotation, automatic filters, such as rich multi-format string; support worksheet PNG, JPEG images, custom chart; · memory optimization mode supports writing large files.  

2.XlsxWriter module installation method

3. A simple example

Here a simple demo function realized insert text (Chinese characters), numbers (sum calculation), images, and other cell formats, as follows: 

【/home/test/XlsxWriter/simple1.py】

 

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: simple01.py
# Author: BenjaminYang
# Create Date: 2019-06-02 02:37
# Modify Author: BenjaminYang
# Modify Date: 2019-06-02 02:37
# Function: 
#***************************************************************#

#!/usr/bin/python
import xlsxwriter
workbook=xlsxwriter.Workbook('demo1.xlsx') #创建一个Excel文件
worksheet=workbook.add_worksheet()  #Create a worksheet object 
worksheet.set_column ( ' A: A ' , 20)   # set the first column (A) a width of 20 pixels 
Bold = workbook.add_format ({ ' Bold ' : True})    # define a bold format object 
worksheet.write ( ' A1 ' , ' the Hello ' )   # A1 cell write 'the Hello' 
worksheet.write ( ' A2 ' , ' World ' , Bold)   # A2 cell write 'World' bold and reference format object Bold 
worksheet.write ( ' B2 ' , the U- ' Chinese test ',bold)  # A2 cells and Chinese writing bold formatting objects referenced Bold 
worksheet.write (2,0,32)   # by writing the digital representation method ranks 32 
worksheet.write (3,0,35.5) # line representation of the cell index 0 as an initial value, '3,0' is equivalent to 'A3' 
worksheet.write (4,0, ' = the SUM (A3: A4) ' ) # seeking A3: A4 and the result written the '4,0', i.e. 'A5' 
worksheet.insert_image ( ' B5 ' , ' IMG / python.jpg ' )   # in cell B5 insert picture 
workbook.close ()   # Excel file Close

 

4. The module common methods described

1.Workbook class

Workbook class definition: Workbook (filename [, options] ), the class implements to create a Workbook object of a XlsxWriter. Workbook class represents the entire spreadsheet files, and stored on disk. Parameters filename (String Type) created as an Excel file storage path; a parameter options (Dict type) Workbook parameters are optional, as the general format of the initialization operation table of contents, for example, a value of { 'strings_to_numbers': True} indication worksheet.write converting the digital activation string () method. · Add_worksheet ([sheetname]) method, is to add a new worksheet, parameters sheetname (String type) for the optional sheet name, the default is
Sheet1. For example, the following code corresponding to Figure 3-2 shows the results.

 

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: simple02.py
# Author: BenjaminYang
# Create Date: 2019-06-02 02:58
# Modify Author: BenjaminYang
# Modify Date: 2019-06-02 02:58
# Function: 
#***************************************************************#

#!/usr/bin/python
import xlsxwriter
workbook=xlsxwriter.Workbook('demo2.xlsx')
worksheet1=workbook.add_worksheet()  #sheet1
worksheet2=workbook.add_worksheet('Foglio2') #Foglio2
worksheet3=workbook.add_worksheet('Data')  #Data
worksheet4=workbook.add_worksheet()       #sheet4
workbook.close()

 

 

· Add_format ([properties]) method, is to create a new object in the work table format to format the cells. Parameter properties (dict type) a specified format attribute dictionary, for example, a bold format objects, workbook.add_format ({ 'bold': True}). Format methods (Method format) format can also be realized by setting the equivalent bold formatting code is as follows:

bold = workbook.add_format() 
bold.set_bold()

· Add_chart (options) method, is to create a chart object in the worksheet, the interior is achieved by insert_chart () method, the parameter options (dict type) specifies a dictionary property of the chart, such as setting a line type of the chart object, code chart = workbook.add_chart ({ 'type': 'line'}).

·close()方法,作用是关闭工作表文件,如workbook.close()。 

 

2.Worksheet类

Worksheet类代表了一个Excel工作表,是XlsxWriter模块操作Excel
内容最核心的一个类,例如将数据写入单元格或工作表格式布局等。

Worksheet对象不能直接实例化,取而代之的是通过Workbook对象调用 add_worksheet()方法来创建。Worksheet类提供了非常丰富的操作 Excel内容的方法,其中几个常用的方法如下:

·write(row,col,*args)方法,作用是写普通数据到工作表的单 元格,参数row为行坐标,col为列坐标,坐标索引起始值为0;*args无 名字参数为数据内容,可以为数字、公式、字符串或格式对象。为了简 化不同数据类型的写入过程,write方法已经作为其他更加具体数据类型 方法的别名,包括:

·write_string()写入字符串类型数据,如:

worksheet.write_string(0, 0, 'Your text here');

·write_number()写入数字类型数据,如:

worksheet.write_number('A2', 2.3451);

·write_blank()写入空类型数据,如:

worksheet.write('A2', None);

·write_formula()写入公式类型数据,如:

worksheet.write_formula(2, 0, '=SUM(B1:B5)');

·write_datetime()写入日期类型数据,如:

worksheet.write_datetime(7, 0,datetime.datetime.strptime('2013-01-23''%Y-%m-%d'),workbook.add_format({'num_format''yyyy-mm-dd'}));

·write_boolean()写入逻辑类型数据,如:

worksheet.write_boolean(0, 0, True);

·write_url()写入超链接类型数据,如:

worksheet.write_url('A1''ftp://www.python.org/'

下列通过具体的示例来观察别名write方法与数据类型方法的对应 关系,代码如下:

worksheet.write(0, 0, 'Hello'# write_string()
worksheet.write(1, 0, 'World'# write_string()
worksheet.write(2, 0, 2)                # write_number()
worksheet.write(3, 0, 3.00001)          # write_number() 
worksheet.write(4, 0, '=SIN(PI()/4)'# write_formula()
worksheet.write(5, 0, ''# write_blank()
worksheet.write(6, 0, None)             # write_blank()

 

·set_row(row,height,cell_format,options)方法,作用是设置 行单元格的属性。参数row(int类型)指定行位置,起始下标为0;参数 height(float类型)设置行高,单位像素;参数cell_format(format类 型)指定格式对象;参数options(dict类型)设置行hidden(隐藏)、 level(组合分级)、collapsed(折叠)。操作示例如下:

worksheet.write('A1''Hello'#在A1单元格写入'Hello'字符串 
cell_format = workbook.add_format({'bold': True})    #定义一个加粗的格式对象 
worksheet.set_row(0, 40, cell_format)    #设置第1行单元格高度为40像素,且引用 加粗格式对象
worksheet.set_row(1, None, None, {'hidden': True})    #隐藏第2行单元格

·set_column(first_col,last_col,width,cell_format,options)方 法,作用为设置一列或多列单元格属性。参数first_col(int类型)指定 开始列位置,起始下标为0;参数last_col(int类型)指定结束列位置, 起始下标为0,可以设置成与first_col一样;参数width(float类型)设置 列宽;参数cell_format(Format类型)指定格式对象;参数options(dict 类型)设置行hidden(隐藏)、level(组合分级)、collapsed(折 叠)。操作示例如下:

worksheet.write('A1''Hello'#在A1单元格写入'Hello'字符串
worksheet.write('B1''World'#在B1单元格写入'World'字符串 
cell_format = workbook.add_format({'bold': True})    #定义一个加粗的格式对象 
worksheet.set_column(0,1, 10,cell_format)#设置0到1即(A到B) 列单元格宽度为10像素,且引用加粗格式对象 
worksheet.set_column('C:D', 20)    #设置C到D列单元格宽度为20像素
worksheet.set_column('E:G', None, None, {'hidden': 1})    #隐藏E到G列单 元格

·insert_image(row,col,image[,options])方法,作用是插入图 片到指定单元格,支持PNG、JPEG、BMP等图片格式。参数row为行坐 标,col为列坐标,坐标索引起始值为0;参数image(string类型)为图 片路径;参数options(dict类型)为可选参数,作用是指定图片的位 置、比例、链接URL等信息。操作示例如下:

#在B5单元格插入python-logo.png图片,图片超级链接为http://python.org 
worksheet.insert_image('B5''img/python-logo.png', {'url''http://python.org'})

5.Chart类

Chart类实现在XlsxWriter模块中图表组件的基类,支持的图表类型 包括面积、条形图、柱形图、折线图、饼图、散点图、股票和雷达等,
一个图表对象是通过Workbook(工作簿)的add_chart方法创建,通过 {type,'图表类型'}字典参数指定图表的类型,语句如下:

chart = workbook.add_chart({type, 'column'})    #创建一个column(柱形)图表

·area:创建一个面积样式的图表;

·bar:创建一个条形样式的图表;

·column:创建一个柱形样式的图表;

·line:创建一个线条样式的图表;

·pie:创建一个饼图样式的图表;

·scatter:创建一个散点样式的图表;

·stock:创建一个股票样式的图表;

·radar:创建一个雷达样式的图表。

然后再通过Worksheet(工作表)的insert_chart()方法插入到指 定位置,语句如下:

worksheet.insert_chart('A7', chart)    #在A7单元格插入图表

下面介绍chart类的几个常用方法。

·chart.add_series(options)方法,作用为添加一个数据系列到图 表,参数options(dict类型)设置图表系列选项的字典,操作示例如 下:

chart.add_series({
                'categories':'=Sheet1!$A$1:$A$5',
                'values':'=Sheet1!$B$1:$B$5',
                'line':{'color':'red'}
})

add_series方法最常用的三个选项为categories、values、line,其中 categories作为是设置图表类别标签范围;values为设置图表数据范围;
line为设

·其他常用方法及示例。

·set_x_axis(options)方法,设置图表X轴选项,示例代码如 下,效果图如图3-7所示。

置图表线条属性,包括颜色、宽度等。

chart.set_x_axis({
             'name':'Earnings per Quarter',    #设置X轴标题名称
             'name_font':{'size':14,'bold':True},  #设置X轴标题字体属性 
             'num_font':{'italic':True }    #设置X轴数字字体属性 
})

·set_size(options)方法,设置图表大小,如 chart.set_size({'width':720,'height':576}),其中width为宽度, height为高度。 

·set_title(options)方法,设置图表标题,如 chart.set_title({'name':'Year End Results'})

·set_style(style_id)方法,设置图表样式,style_id为不同数字 则代表不同样式,如chart.set_style(37)

·set_table(options)方法,设置X轴为数据表格形式,如 chart.set_table()

整合

#!/usr/bin/python
import xlsxwriter
workbook=xlsxwriter.Workbook('demo3.xlsx')
worksheet=workbook.add_worksheet()
chart = workbook.add_chart({'type':'column'}) #创建一个column(柱形图表)
worksheet.insert_chart('A7',chart)  #在A7单元格插入图表

chart.add_series({
                'categories':'=Sheet1!$A$1:$A$5',
                'values':'=Sheet1!$B$1:$B$5',
                'line':{'color':'red'}
})
chart.set_x_axis({
             'name':'Earnings per Quarter',    #设置X轴标题名称
             'name_font':{'size':14,'bold':True},  #设置X轴标题字体属性 
             'num_font':{'italic':True }    #设置X轴数字字体属性 
})
chart.set_size({'width':720,'height':576})
chart.set_title({'name':'Year End Results'})
chart.set_style(37)
workbook.close()

 

报错:可能是版本原因需要做如下的操作

 #vi /usr/lib/python2.7/site-packages/xlsxwriter/vi __init__.py

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

执行效果

 

6.定制自动化业务流量报表周报

本次实践通过定制网站5个频道的流量报表周报,通过XlsxWriter 模块将流量数据写入Excel文档,同时自动计算各频道周平均流量,再 生成数据图表。具体是通过workbook.add_chart({'type':'column'})方 法指定图表类型为柱形,使用write_row、write_column方法分别以行、 列方式写入数据,使用add_format()方法定制表头、表体的显示风 格,使用add_series()方法将数据添加到图表,同时使用 chart.set_size、set_title、set_y_axis设置图表的大小及标题属性,最后通 过insert_chart方法将图表插入工作表中。

【/home/test/XlsxWriter/simple4.py】

 

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: simple04.py
# Author: BenjaminYang
# Create Date: 2019-06-02 05:17
# Modify Author: BenjaminYang
# Modify Date: 2019-06-02 05:17
# Function: 
#***************************************************************#

#!/usr/bin/python
import xlsxwriter
workbook=xlsxwriter.Workbook('chart.xlsx')   #创建一个Excel文件 
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频道一周7天流量数据列表 
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], 
      ]
format=workbook.add_format()  #定义format格式对象
format.set_border(1)     #定义format对象单元格边框加粗(1像素)的格式 
format_title=workbook.add_format()  #定义format_title格式对象 
format_title.set_border(1)          #定义format_title对象单元格边框加粗(1像素)的格式
format_title.set_bg_color('#cccccc')  #定义format_title对象单元格背景颜色为 #cccccc
format_title.set_align('center')      #定义format_title对象单元格居中对齐的格式
format_title.set_bold()                #定义format_title对象单元格内容加粗的格式 
format_ave=workbook.add_format()       #定义format_ave格式对象 
format_ave.set_border(1)               #定义format_ave对象单元格边框加粗(1像素)的格式 
format_ave.set_num_format('0.00')      #定义format_ave对象单元格数字类别显示格式 
#下面分别以行或列写入方式将标题、业务名称、流量数据写入起初单元格,同时引用不同格式对象 
worksheet.write_row('A1',title,format_title)   #第一行标题
worksheet.write_column('A2',buname,format)   #第一列从A2单元格开始对应频道 
worksheet.write_row('B2',data[0],format)    #第二行从B2开始对应data[0] 
worksheet.write_row('B3',data[1],format)    #第三行从B3开始对应data[1]
worksheet.write_row('B4',data[2],format)    #第四行从B4开始对应data[2]
worksheet.write_row('B5',data[3],format)    #第五行从B5开始对应data[3]
worksheet.write_row('B6',data[4],format)    #第六行从B6开始对应data[4]
#定义图表数据系列函数
def chart_series(cur_row):
    worksheet.write_formula('I'+cur_row,\
            '=AVERAGE(B'+cur_row+':H'+cur_row+')',format_ave) #计算(AVERAGE 函数)频道周平均流量 
    chart.add_series({
                'categories':'=Sheet1!$B$1:$H$1', #将“星期一至星期日”作为图表数据 标签(X轴)
                'values':'=Sheet1!$B$'+cur_row+':$H$'+cur_row,  #频道一周 所有数据作为数据区域 
                'line':{'color':'black'},  #线条颜色定义为black(黑色) 
                'name':'Sheet1!$A$'+cur_row,   #引用业务名称为图例项
                })
for row in range(2,7):   #数据域以第2~6行进行图表数据系列函数调用
    chart_series(str(row))

#chart.set_table()    #设置X轴表格格式,本示例不启用 
#chart.set_style(30)    #设置图表样式,本示例不启用 

chart.set_size({'width':577,'height':287})  #设置图表大小
chart.set_title({'name':u'业务流量周报图表'})  #设置图表(上方)大标题 
chart.set_y_axis({'name':'Mb/s'})       #设置y轴(左侧)小标题 
worksheet.insert_chart('A8',chart)      #在A8单元格插入图表 
workbook.close()    #关闭Excel文档

 

 

Guess you like

Origin www.cnblogs.com/benjamin77/p/10961829.html