wince datagrid数据居中设置_(原创)xlsxwriter,python excel 写入数据\图表等操作_图表操作(二)...

前面分享了使用xlsxwriter创建excel和写入数据

GUC:(原创)xlsxwriter,python excel 写入数据图表等操作_创建、写入(一)​zhuanlan.zhihu.com

xlsxwrite除了常规数据操作,还可以灵活,精细的操作图表,这也为吸引我要分享的原因之一,对于固定格式报表可以自动输出,大大提升日常的办公效率

先用上一篇文章的方法写入数据

import xlsxwriter

wb = xlsxwriter.Workbook("e:xlsxwriterfilename.xlsx")
ws = wb.add_worksheet("案例")

# 数据
data = [
    ('地区','1月销售量','2月销售量'),
    ('广州',52641,45641,),
    ('上海',65444,54584,),
    ('北京',57485,65484,),
    ('深圳',42314,85214,)
]

#字段格式
header = {
    'bold' : True, #粗体
    'font_name' : '微软雅黑',
    'font_size' : 10,
    'border' : True, #边框线
    'align' : 'center', #水平居中
    'valign' : 'vcenter', #垂直居中
    'bg_color' : '#66DD00' #背景颜色
}

text = {
    'font_name' : '微软雅黑',
    'font_size' : 9,
    'border' : True,
    'align' : 'left', #左对齐
    'valign' : 'vcenter'
}

headerpm = wb.add_format(header)
textpm = wb.add_format(text)
ws.set_column('C:C',13)  #C列宽度

for row,rowdata in enumerate(data):
    for col,coldata in enumerate(rowdata):
        if row==0:
            ws.write(row,col,coldata,headerpm)
        else:
            ws.write(row, col, coldata, textpm)

wb.close()

结果数据如下:

f36556e07b544b270e557751bb9de869.png

使用Workbook的add_chart()方法创建图表对象,以字典表的方式传入参数

chart = workbook.add_chart({'type': 'column'}) #创建一个柱状图

type表示要创建的图表类型,值及对应类型如下:

  • area:面积图
  • bar:条形图
  • column:柱状图
  • line:折线图
  • pie:饼图
  • doughnut:圆环图
  • scatter:散点图
  • stock:股价图
  • radar:雷达图

使用add.series()数据系列添加的图表,以字典表的方式传入参数

data1 = {
    'name': '案例!$B$1',
    'categories' : '案例!$A$2:$A4',
    'values' : '案例!$B$2:$B4'
}
  • name:该数据系列的名称 ,可以填写引用单元格值,也可以直接填写值
  • categories:图表类别标签
  • values:该数据系列的值
  • values选项为必须,其他选项为可选
  • categories、values可以使用单元格的名称,也可以使用行/列索引表示,即[所在的sheet名, 首行索引, 首列索引, 尾行索引,尾列索引 ]

以下表示同上

data1 = {
    'name': '1月销售量',
    'categories' : ['案例',1,0,4,0],
    'values' : ['案例',1,1,4,1]
}

图表中增加数据系列

chart.add_series(data1)

使用Worksheet的insert_chart()方法插入工作表中,需指定起始位置

ws.insert_chart('B8',chart) #在B10单位格位置插入图表

结果如下

594aa12234c8067f6a83023c8a02c4ea.png

再插入2月销售量数据系列

data1 = {
    'name': '案例!$B$1',
    'categories' : '案例!$A$2:$A4',
    'values' : '案例!$B$2:$B4'
}

data2 = {
    'name': '案例!$C$1',
    'categories' : '案例!$A$2:$A4',
    'values' : '案例!$C$2:$C4'
}

chart.add_series(data1)
chart.add_series(data2)
ws.insert_chart('B8',chart)

结果如下

c8d55d0173cd33f6b2f8453d14b16a13.png

再美化一下表格

'overlap' : -20

overlap:两个数据系列之间重叠的距离,范围+/-100,默认值为0,适用于条形图/柱状图

如下图红框的距离

67e760463ea85d3c3854a198ddaf658f.png
'gap' : 100

gap:在条形图/柱形图中数据系列之间的间隔。范围是0-500。默认值是150

如下图红框的距离

453f19bdf4d50a39173c9f36f4ad3559.png
'data_labels' : {'value':True,'font':{'name':'微软雅黑','size':9}}

添加数据标签,并设置数据标签的字体为微软雅黑,大小为9

如下图红框部分

bf68007fbbcbf84fbee706463d58b384.png

设置X轴参数,斜体,大小10,加粗

chart.set_x_axis(
    {
        'num_font':  {'italic': True,'size':11,'bold':True,}
    }
)

结果见下图

c4a3e8a016de59a91d8540e9f070f2f7.png

设置Y轴参数,去除Y轴及背景网格线

chart.set_y_axis(
    {
        'major_gridlines':{'visible':False},  #去除Y轴背景网格线
        'visible':None  #去除Y轴
    }
)

结果如下图

9676b14d12a0cc584b11b428fcc4cf6c.png

设置图表标题

chart.set_title(
    {
        'name':'1-2月销售量',
        'name_font': {'name': '微软雅黑'}
    }
)

结果如下图

98acb5b4478f2c0b30ef397bd0a2ea5c.png

设置图表大小,宽620,高350

chart.set_size({'width':620,'height':350})

结果如下图

a31c7e276d4e2f25fd021db85bdd9487.png

sheet完整如下图

45042d4b24f0f7858e336c58850922fa.png

去掉图表边框

chart.set_chartarea({'border':{'none':True}})

结果如下图

88b6b1b8eed4c7c9582a731d9c06870e.png

隐藏工作表网格线

ws.hide_gridlines(2)
#参数0,不隐藏
#参数1,仅隐藏打印的网格线
#参数2,隐藏屏幕和打印的网格线

结果如下图

bce886c9bbc748c5c9020f5067bcc33d.png

最后附上完整代码

import xlsxwriter

wb = xlsxwriter.Workbook("e:xlsxwriterfilename.xlsx")
ws = wb.add_worksheet("案例")

# 数据
data = [
    ('地区','1月销售量','2月销售量'),
    ('广州',52641,45641,),
    ('上海',65444,54584,),
    ('北京',57485,65484,),
    ('深圳',42314,85214,)
]

#字段格式
header = {
    'bold' : True, #粗体
    'font_name' : '微软雅黑',
    'font_size' : 10,
    'border' : True, #边框线
    'align' : 'center', #水平居中
    'valign' : 'vcenter', #垂直居中
    'bg_color' : '#66DD00' #背景颜色
}

text = {
    'font_name' : '微软雅黑',
    'font_size' : 9,
    'border' : True,
    'align' : 'left', #左对齐
    'valign' : 'vcenter'
}

headerpm = wb.add_format(header)
textpm = wb.add_format(text)
ws.set_column('C:C',13)  #C列宽度

for row,rowdata in enumerate(data):
    for col,coldata in enumerate(rowdata):
        if row==0:
            ws.write(row,col,coldata,headerpm)
        else:
            ws.write(row, col, coldata, textpm)


chart = wb.add_chart({'type': 'column'})

data1 = {
    'name': '案例!$B$1',
    'categories' : '案例!$A$2:$A4',
    'values' : '案例!$B$2:$B4',
    'overlap' : -20,
    'gap' : 100,
    'data_labels' : {'value':True,'font':{'name':'微软雅黑','size':9}}
}

data2 = {
    'name': '案例!$C$1',
    'categories' : '案例!$A$2:$A4',
    'values' : '案例!$C$2:$C4',
    'data_labels': {'value': True, 'font': {'name': '微软雅黑', 'size': 9}}
}

chart.set_x_axis(
    {
        'num_font':  {'italic': True,'size':11,'bold':True,}
    }
)

chart.set_y_axis(
    {
        'major_gridlines':{'visible':False},
        'visible':None
    }
)


chart.set_title(
    {
        'name':'1-2月销售量',
        'name_font': {'name': '微软雅黑'}
    }
)

chart.set_size({'width':620,'height':350})
chart.set_chartarea({'border':{'none':True}})
ws.hide_gridlines(2)

chart.add_series(data1)
chart.add_series(data2)
ws.insert_chart('B8',chart)

wb.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值