0

0

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

PHPz

PHPz

发布时间:2023-04-11 23:49:14

|

2164人浏览过

|

来源于51CTO.COM

转载

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

大家好!我是虎哥。

项目背景

作为数据分析师,我们需要经常制作统计分析图表。但是报表太多的时候往往需要花费我们大部分时间去制作报表。这耽误了我们利用大量的时间去进行数据分析。但是作为数据分析师我们应该尽可能去挖掘表格图表数据背后隐藏关联信息,而不是简单的统计表格制作图表再发送报表。

一、报表自动化目的

1.节省时间,提高效率

自动化总是能够很好的节省时间,提高我们的工作效率。让我们的程序编程尽可能的降低每个功能实现代码的耦合性,更好的维护代码。这样我们会节省很多时间让我们有空去做更多有价值有意义的工作。

2.减少错误

编码实现效果正确无误的话是是可以一直沿用的,如果是人为来操作的话反而可能会犯一些错误。交给固定的程序来做更加让人放心,需求变更时仅修改部分代码即可解决问题。

二、报表自动化范围

首先我们需要根据业务需求来制定我们所需要的报表,并不是每个报表都需要进行自动化的,一些复杂二次开发的指标数据要实现自动化编程的比较复杂的,而且可能会隐藏着各种BUG。所以我们需要对我们工作所要用到的报表的特性进行归纳,以下是我们需要综合考虑的几个方面:

1.频率

对于一些业务上经常需要用到的表,这些表我们可能要纳入自动化程序的范围。例如客户信息清单、销售额流量报表、业务流失报表、环比同比报表等。

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

这些使用频率较高的报表,都很有必要进行自动化。对于那些偶尔需要使用的报表,或者是二次开发指标,需要复制统计的报表,这些报表就没必要实现自动化了。

2.开发时间

这就相当于成本和利率一样,若是有些报表自动化实现困难,还超过了我们普通统计分析所需要的时间,就没必要去实现自动化。所以开始自动化工作的时候要衡量一下开发脚本所耗费的时间和人工做表所耗费的时间哪个更短了。当然我会提供一套实现方案,但是仅对一些常用简单的报表。

3.流程

对于我们报表每个过程和步骤,每个公司都有所不同,我们需要根据业务场景去编码实现各个步骤功能。所以我们制作的流程应该是符合业务逻辑的,制作的程序也应该是符合逻辑的。

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

三、实现步骤

首先我们需要知道我们需要什么指标:

指标

  • 总体概览指标

反映某一数据指标的整体大小

  • 对比性指标
  • 环比

相邻时间段内的指标直接作差

  • 同比

相邻时间段内某一共同时间点上指标的对比

  • 集中趋势指标
  • 中位数
  • 众数
  • 平均数/加权平均数
  • 离散程度指标
  • 标准差
  • 方差
  • 四分位数
  • 全距(极差)
  • 最大界减最小界
  • 相关性指标
  • r

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

我们拿一个简单的报表来进行模拟实现:

第一步:读取数据源文件

首先我们要了解我们的数据是从哪里来的,也就是数据源。我们最终的数据处理都是转化为DataFrame来进行分析的,所以需要对数据源进行转化为DataFrame形式:

import pandas as pd
import json
import pymysql
from sqlalchemy import create_engine
# 打开数据库连接
conn = pymysql.connect(host='localhost',
port=3306,
user='root',
passwd='xxxx',
charset = 'utf8'
)
engine=create_engine('mysql+pymysql://root:xxxx@localhost/mysql?charset=utf8')
def read_excel(file):
 df_excel=pd.read_excel(file)
 return df_excel
def read_json(file):
 with open(file,'r')as json_f:
 df_json=pd.read_json(json_f)
 return df_json
def read_sql(table):
 sql_cmd ='SELECT * FROM %s'%table
 df_sql=pd.read_sql(sql_cmd,engine)
 return df_sql
def read_csv(file):
 df_csv=pd.read_csv(file)
 return df_csv

以上代码均通过测试可以正常使用,但是pandas的read函数针对不同的形式的文件读取,其read函数参数也有不同的含义,需要直接根据表格的形式来调整。

其他read函数将会在文章写完之后后续补上,除了read_sql需要连接数据库之外,其他的都是比较简单的。

极限网络办公Office Automation
极限网络办公Office Automation

专为中小型企业定制的网络办公软件,富有竞争力的十大特性: 1、独创 web服务器、数据库和应用程序全部自动傻瓜安装,建立企业信息中枢 只需3分钟。 2、客户机无需安装专用软件,使用浏览器即可实现全球办公。 3、集成Internet邮件管理组件,提供web方式的远程邮件服务。 4、集成语音会议组件,节省长途话费开支。 5、集成手机短信组件,重要信息可直接发送到员工手机。 6、集成网络硬

下载

第二步:DataFrame计算

我们以用户信息为例:

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

我们需要统计的指标为:

  • #指标说明
  • 单表图:
  • 前十个产品受众最多的地区
#将城市空值的一行删除
df=df[df['city_num'].notna()]
#删除error
df=df.drop(df[df['city_num']=='error'].index)
#统计df = df.city_num.value_counts()

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

我们仅获取前10名的城市就好了,封装为饼图:

def pie_chart(df):
 #将城市空值的一行删除
 df=df[df['city_num'].notna()]
 #删除error
 df=df.drop(df[df['city_num']=='error'].index)
 #统计
 df = df.city_num.value_counts()
 df.head(10).plot.pie(subplots=True,figsize=(5, 6),autopct='%.2f%%',radius = 1.2,startangle = 250,legend=False)
pie_chart(read_csv('user_info.csv'))

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

将图表保存起来:

plt.savefig('fig_cat.png')

要是你觉得matplotlib的图片不太美观的话,你也可以换成echarts的图片,会更加好看一些:

pie = Pie()
pie.add("",words)
pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地区"))
#pie.set_series_opts(label_opts=opts.LabelOpts(user_df))
pie.render_notebook()

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

封装后就可以直接使用了:

def echart_pie(user_df):
 user_df=user_df[user_df['city_num'].notna()]
 user_df=user_df.drop(user_df[user_df['city_num']=='error'].index)
 user_df = user_df.city_num.value_counts()
 name=user_df.head(10).index.tolist()
 value=user_df.head(10).values.tolist()
 words=list(zip(list(name),list(value)))
 pie = Pie()
 pie.add("",words)
 pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地区"))
 #pie.set_series_opts(label_opts=opts.LabelOpts(user_df))
 return pie.render_notebook()
user_df=read_csv('user_info.csv')
echart_pie(user_df)

可以进行保存,可惜不是动图:

from snapshot_selenium import snapshot
make_snapshot(snapshot,echart_pie(user_df).render(),"test.png")

保存为网页的形式就可以自动加载JS进行渲染了:

echart_pie(user_df).render('problem.html')
os.system('problem.html')

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

第三步:自动发送邮件

做出来的一系列报表一般都要发给别人看的,对于一些每天需要发送到指定邮箱或者需要发送多封报表的可以使用Python来自动发送邮箱。

在Python发送邮件主要借助到smtplib和email这个两个模块。

  • smtplib:主要用来建立和断开与服务器连接的工作。
  • email:主要用来设置一些些与邮件本身相关的内容。

不同种类的邮箱服务器连接地址不一样,大家根据自己平常使用的邮箱设置相应的服务器进行连接。这里博主用网易邮箱展示:

首先需要开启POP3/SMTP/IMAP服务:

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

之后便可以根据授权码使用python登入了。

import smtplib
from email import encoders
from email.header import Header
from email.utils import parseaddr,formataddr
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
#发件人邮箱
asender="fanstuck@163.com"
#收件人邮箱
areceiver="1079944650@qq.com"
#抄送人邮箱
acc="fanstuck@163.com"
#邮箱主题
asubject="谢谢关注"
#发件人地址
from_addr="fanstuck@163.com"
#邮箱授权码
password="####"
#邮件设置
msg=MIMEMultipart()
msg['Subject']=asubject
msg['to']=areceiver
msg['Cc']=acc
msg['from']="fanstuck"
#邮件正文
body="你好,欢迎关注fanstuck,您的关注就是我继续创作的动力!"
msg.attach(MIMEText(body,'plain','utf-8'))
#添加附件
htmlFile = 'C:/Users/10799/problem.html'
html = MIMEApplication(open(htmlFile , 'rb').read())
html.add_header('Content-Disposition', 'attachment', filename='html')
msg.attach(html)
#设置邮箱服务器地址和接口
smtp_server="smtp.163.com"
server = smtplib.SMTP(smtp_server,25)
server.set_debuglevel(1)
#登录邮箱
server.login(from_addr,password)
#发生邮箱
server.sendmail(from_addr,areceiver.split(',')+acc.split(','),msg.as_string())
#断开服务器连接
server.quit()

运行测试:  

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

下载文件:

Python自动化办公小程序:实现报表自动化和自动发送到目的邮箱

完全没问题!!!

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
ECharts是什么
ECharts是什么

ECharts是基于JavaScript的开源可视化库,能够帮助开发者轻松地实现各种复杂的数据可视化效果,提供了丰富的图表类型和交互功能。本专题为大家提供ECharts是什么的相关的文章、下载、课程内容,供大家免费下载体验。

272

2023.08.04

echarts自适应大小设置
echarts自适应大小设置

使用ECharts的自适应大小设置可以使图表能够根据不同屏幕尺寸和设备进行自适应。一种是使用resize事件,在图表容器大小改变时重新渲染图表;另一种是使用CSS样式,通过设置图表容器的宽度和高度为百分比值,使图表容器根据父元素的大小进行自适应。根据实际需求选择合适的方法,可以使图表在不同设备上都能够良好地显示和交互 。

466

2023.09.13

Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

71

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

1

2026.01.31

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

515

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

245

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5333

2023.08.17

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号