缺点:xlsxwriter不能对已存在的Excel进行编辑插入图标
 
生成图标需要:
1、先准备数据
2、将数据插入到excel中
3、根据插入的数据生成图表
这里的生成excel主要分为准备多维数组类型的数据->数据插入到Excel中->对数据按系列划分生成报表 
 

第二步:将数据插入Excel中

首先要创建一个Excel文件,然后在Excel中创建一个sheet表单页,最后将数据插入到sheet表单页中
1、创建一个Excel对象
workbook = xlsxwriter.Workbook(“Excel名字.xlsx”)
 
2、基于Excel对象创建一个sheet表单对象
worksheet = workbook.add_worksheet(name=“sheet表单的名字,不填写就默认为sheet1")
3、将数据写入sheet表单页worksheet
worksheet.write_row( row, col, data, cell_format=None)
worksheet.write_column(row, col, data, cell_format=None)
 
可以用A1表示第一行第一列的那个单元格,这个时候后面的data可以是个数组,直接插入一行数据
worksheet.write_row("A1", 一行数据, 样式(非必填项))
cell_format为表单样式:例如加粗
bold = workbook.add_format({'bold': 1})
将数据插入表单的例子:
for row in range(len(data)):  # 将数据插入excel中
if row == 0:
print(data[row])
worksheet.write_row("A" + str(row+1), data[row], bold)
worksheet.write_column()
else:
worksheet.write_row("A" + str(row+1), data[row])
 
说明:data为第一步生成的多维数组数据,write_row这里是通过Excel的A1、A2....等方式标识单元格的

第三步:生成图表

1、通过add_chart({’type’:’表格类型’})添加一个chart对象
通过type定义图标的类型,比如是柱形图还是饼图
The supported chart types are:
  • area: Creates an Area (filled line) style chart.
  • bar: Creates a Bar style (transposed histogram) chart.
  • column: Creates a column style (histogram) chart.
  • line: Creates a Line style chart.
  • pie: Creates a Pie style chart.
  • doughnut: Creates a Doughnut style chart.
  • scatter: Creates a Scatter style chart.
  • stock: Creates a Stock style chart.
  • radar: Creates a Radar style chart.
 
2、添加图标要统计的数据,同一个报表可以添加多个系列
# 第一种添加方式:[sheetname, A1(起始单元格标识), F1(结束单元格标识), last_col]
chart.add_series({
'categories': '=Sheet1!$A$1:$A$5',
'values': '=Sheet1!$B$1:$B$5',
'line': {'color': 'red’},
'name':'=各端BUG数汇总_图表!$A$3'
})
 
# 第二种添加方式:[sheetname, first_row, first_col, last_row, last_col]
chart.add_series({
'categories': ['Sheet1', 0, 0, 4, 0],
'values': ['Sheet1', 0, 1, 4, 1],
'line': {'color': 'red'},
'name':['Sheet1', 0, 0],
'data_labels': {'value': True}
})
 
categories为图表下面的分组名称
values:必填项,要统计的图标数据
name:系列的名字
data_labels:显示在图表上的数据标签
 
一个图表可以添加多个系列,可以通过两种方式添加多个系列
a、调用多次add_series()方法
b、add_series()中categories和values多个值用元组记录
chart.add_series({
'categories': '=(Sheet1!$A$1:$A$9,Sheet1!$A$14:$A$25)',
'values': '=(Sheet1!$B$1:$B$9,Sheet1!$B$14:$B$25)',
})
 
3、给图表定义名字和样式
chart.set_title({'name': ‘图标名字'})
chart.set_style(10)
chart.height=600
chart.width=960
height和width为生成的图标的宽高,默认宽高为480和288
 
4、将图表插入到Excel中
a:方法1
worksheet.insert_chart('A7', chart)方法插入数据
b:方法2
chartsheet = workbook.add_chartsheet()
chartsheet.set_chart(chart)
 
下面是自己写的一个小函数:
def drawing(type, data, categories, values, time_interval=20, end_row='', end_column='', line_color='red',
filepath='default.xlsx',
title='', x_axis='', y_axis=''):
# 创建一个Excel对象
workbook = xlsxwriter.Workbook(filepath)
# 基于Excel对象创建一个sheet表单对象
worksheet = workbook.add_worksheet()
# Create a new Chart object.创建一个新的图表对象。
chart = workbook.add_chart({'type': type})
for i, line in enumerate(data):
for j, col in enumerate(line):
worksheet.write(i, j, col)
# 设置表格标题
chart.set_title({'name': title})
chart.set_x_axis({'name': x_axis})
chart.set_y_axis({'name': y_axis})
chart.add_series({
'marker': {'type': 'diamond'},
'name': '=Sheet1!$A$1', # name:系列的名字
'categories': categories, # categories为图表下面的分组名称
'values': values, # values:必填项,要统计的图标数据
'data_labels': {'value': False}, # data_labels:显示在图表上的数据标签
'line': {'color': line_color}
})
# 设置图标生成位置
worksheet.insert_chart(5, 3, chart)
workbook.close() drawing('line', test_data, categories, values, x_axis=x_axis, y_axis=y_axis)

转载自:https://www.cnblogs.com/meitian/p/8320989.html

 

python中用xlsxwriter创建图表的更多相关文章

  1. Python xlsxwriter库 图表Demo

    折线图 import xlsxwriter # 创建一个excel workbook = xlsxwriter.Workbook("chart_line.xlsx") # 创建一个 ...

  2. python使用VBA:Excel创建图表(转)

    # -*- coding: utf-8 -*- """ Created on Thu Mar 06 11:22:03 2014 @author: Administrato ...

  3. python xlsxwriter创建excel 之('Exception caught in workbook destructor. Explicit close() may be required for workbook.',)

    python2.7使用xlsxwriter创建excel ,不关闭xlsxwriter对象,会报错: Exception Exception: Exception('Exception caught ...

  4. python(xlsxwriter模块使用)

    XlsxWriter简介XlsxWriter是一个Python模块,可用于在Excel 2007+ XLSX文件中写入多个工作表的文本,数字,公式和超链接.它支持格式化等功能.可到官网了解更多详情,官 ...

  5. python 读写、创建 文件

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  6. Python模块 (xlsxwriter)

    xlsxwriter是python中用来处理execl表格的库 参考

  7. python 读写、创建 文件的方法(必看)

    python 读写.创建 文件的方法(必看) 更新时间:2016年09月12日 10:26:41 投稿:jingxian 我要评论下面小编就为大家带来一篇python 读写.创建 文件的方法(必看). ...

  8. python读写、创建文件、文件夹等等

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  9. Python中用函数实现代码的复用

    # Python中用函数实现代码复用 """ def funcname(paras): statements return [expression] 关于函数定义说明如下 ...

随机推荐

  1. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  2. Precision 7520双硬盘无法识别固态硬盘

    将RAID ON 修改为AHCI,如图1,会使得 win10无法 启动,如图2 图 1 图 2 可以开legacy,如图3,让电脑可以从u盘启动,如图4,但是也无法查看到固态硬盘 图 3 图 4 网上 ...

  3. 【AGC 005F】Many Easy Problems

    Description One day, Takahashi was given the following problem from Aoki: You are given a tree with ...

  4. JavaScript中的alert()与console.log()的区别

    1.alert() [1.1]有阻塞作用,不点击确定,后续代码无法继续执行 [1.2]alert()只能输出string,如果alert输出的是对象会自动调用toString()方法 e.g. ale ...

  5. Linux-Shell编程之判断文件类型

    前言 如需使用本博文源码或者撰写文章,请注明博文来源:https://www.cnblogs.com/johnnyzen/p/10534386.html,劳动所得,侵权必究. 题目 設計一個shell ...

  6. 简单迷宫算法(递归与非递归C++实现)

    假定迷宫如下:1代表墙,0代表道路,起点在(1,1),终点(11,9)(PS:下标从0开始计算). 现在寻求一条路径能从起点到达终点(非最短). 有两种解法:递归与非递归. 递归算法思路: 要用递归, ...

  7. exists,in的区别-mysql

    如说两张表一张是用户表TDefUser(userid,address,phone),一张是消费表TAccConsume(userid,time,amount),我要查消费超过5000的用户记录,那么我 ...

  8. java多线程基础篇第一篇

    1.在开始多线程之前,我们先来聊聊计算机的缓存 计算机处理一个程序需要cpu处理器与存储设备的交互.但是在计算机发展的过程中,cpu处理器的处理速度不断提高,而存储设备的读写速度却没有得到与cpu同样 ...

  9. 分布式系列十五: MongoDB数据库

    MongoDB 是基于分布式文件存储的数据库. 开发语言是C++. 具有高性能,可扩展的特点. 是NoSql中最像关系数据库的. 什么是NoSql NoSQL 是 Not only SQL 的缩写. ...

  10. 也写dateUtil.js

    yl.dateUtil = { /** * y 年 * M 月 * d 日 * H 时 h 时(am/pm) * m 分 * s 秒 * S 毫秒 * a 上午/下午(am/pm) * setInte ...