基于xlsxwriter自动化周报生成Python工具

作为指标跟踪人员,相信很多人都为日报、周报、月报烦扰着。所谓复杂的事情简单化、简单的事情重复化、重复的事情代码化,以下分享一下Python的xlsxwriter库的一些使用技巧,实现周报月报的自动化生成,先看一下效果。这只是其中的一小部分,有数据有图当然也可以添加文字描述。

以下是具体实现方法:

1、导入pandas、xlsxwriter、numpy等必要的Python包

import pandas as pd

import numpy as np

import xlsxwriter

from datetime import datetime

2、数据读取

本文利用Python读取sas的数据集,所以用到data= pd.read_sas(r'D:\ZHOUBAO\feicijiang\gxall.sas7bdat'),当然也可以直接读取数据库或者Excel数据,由于公司限制,我只能先用sas将数据做初步处理,然后调用Python。

3、pandas处理数据

用Excel做周报月报,用的最多的工具肯定是透视表了,当然pandas中也可以做数据的透视汇总功能,table_data = pd.pivot_table(

data, index=['列变量'], values='值', columns='行变量', fill_value=0,aggfunc=np.sum)

4、xlsxwriter创建Excel

time = datetime.now()

month = str(time.month)

day = str(time.day)

#创建Excel

workbook = xlsxwriter.Workbook(r'C:\Users\Administrator\Desktop\18年' + month + r'月报.xlsx')

#创建sheet

Sheet1= workbook.add_worksheet('Sheet1')

# 定义表格样式

format1 = workbook.add_format({'bold': False, 'font_color': 'black'})

format2 = workbook.add_format({'bold': True, 'font_color': 'red'})

5、数据写入及绘制图表

#在Sheet1中的A1位置写入“数据更新时间”

Sheet1.write('A1', '数据更新时间' + month + '月' + day)

#数据写入,A4A位置开始写入上述透视表的index列,C3位置开始写入透视表的culumns

Sheet1.write_column('A4', list(table_data .index),format1)

Sheet1.write_row('C3', list(table_data .columns),format1)

#然后通过for循环写入具体数据,并实现如果数据超过目标值则显示用format2样式标记红色

n = 1

for i in list(tb.index):

Sheet1.write_row(

'C' + str(n + 3), np.array(tb[n - 1:n]).tolist()[0])

if table_data [n]>0:

worksheet.conditional_format(n+2,2,n+2,len( np.array(tb[n - 1:n]).tolist()[0])+1,

{'type':'cell','criteria':'>', 'value':taget_fcj[n],'format':format1})

else:

worksheet.conditional_format(n+2,2,n+2,len( np.array(tb[n - 1:n]).tolist()[0])+1,

{'type':'cell','criteria':'>', 'value':taget_fcj[n],'format':format2})

n += 1

#绘制图表

chart1 = workbook.add_chart({'type': 'column'})

chart1.add_series({

'name': '',

'categories': [''],

'values': [''],

})

6、关闭Excel,workbook .close()

到这里一个sheet1已经做好了,再用Python的threading的timer写一个定时任务,就可以定时更新了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180530G0LLZI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券