Python办公自动化

这个文章主要帮助大家学习Python在Excel自动化,Word自动化,PPT自动化这三个实际场景中的应用。欢迎大家学习这篇文章,不足之处,欢迎评论区指正。

一、序言

学好办公自动化,走遍天下都不怕,开玩笑,有点夸张,但还是很有用~

本次博客采用理论+实战的方式由易入难进行讲解,教你手敲每行代码,引导式进行教学,通过这篇文章,你可以掌握Python第三方模块使用,了解到更多办公自动化应用场景

1、课程安排

  • 环境搭建
  • 办公自动化
  • 操作Word:实战-考试系统生成Word试卷案例
  • 操作Excel:实战-计算机班级就业数据分析案例
  • 操作PPT:实战-充电桩用户画像分析案例

2、知识点

  • xlrd模块
  • xlwt模块
  • smtplib模块
  • pywin32模块
  • python-ppt模块
  • python-docx模块
  • pymysql模块
  • xlsxwriter模块

3、学习前提

  • 具备Excel、PPT、Word基本知识
  • 了解Python基本语法

二、环境的搭建

1、安装Python和Office

工欲善其事,必先利其器,首先我们要准备好开发前置环境

 进入python官网:Welcome to Python.org

点击downloads就可以下载安装了

安装的时候如果不想自己手动配置环境变量,可以勾选自动配置:

安装好后,按下windows+R,输入cmd

输入python,显示版本号就代表安装成功

office的安装就不再演示了,可以自己到官网安装或者安装破解版本,百度有很多方法,违规原因,不宜展示破解版路径

2、PyCharm的安装和使用

Python有很多IDE软件,比如下面的软件,但是我还是比较推荐Pycharm

 安装PyCharm,可以自己到官网进行下载安装,点击这里进行下载:下载链接

一般分为专业版Professional和社区版本Community,专业版最强大,学习的话,社区版就够用了

(1)PyCharm界面导览

下载好后,创建一个空项目

选择项目路径

下面是PyCharm界面导览

我们可以编写一行代码,右键执行:

(2)PyCharm常用配置

设置菜单如下

以下是常用设置:

  • 皮肤主题设置Theme

  • 文件编码设置

  • IDE快捷键设置

  • 字体设置(大小/颜色)

菜单栏字体

编辑器字体

  • Editor下设置

在文件头部加上一些通用的格式

  • 远程配置

重置项目解释器

安装包

对了,设置也可以导出和导入,后面重装软件就不需要重新配置了

(3)PyCharm常用快捷键

编码/开发快捷键

Shift+Enter开启新的一行
Ctrl+/注释
Ctrl+Alt+I自动缩进
Ctrl+Q快速查找文档
Ctrl+Shift+/-展开/折叠代码块
Ctrl+Alt+Space快速导入

查找/替换快捷键

Ctrl+F当前文件查找
Ctrl+R当前文件查找替换
Ctrl+Shift+F全局查找
Ctrl+Shift+R全局替换
Ctrl+N查找类的名称

运行/调试快捷键

Shift+F10运行
Shift+F9调试
Alt+Shift+F10运行模式配置
Alt+Shift+F9调试模式配置

三、xlrd+xlwt操作Excel数据

1、xlrd模块介绍

(1)介绍与安装

  • xlrd是Python第三方模块,用来读取Excel表格数据
  • 安装:pip install xlrd
  • 导入:import xlrd

win+r输入cmd打开终端

查看本地已安装第三方模块:pip list

除了这种方式进行安装,还可以按照上一节的设置中进行安装

(2)Excel基础概念介绍

工作簿

里面的sheet叫做工作表

行、列、单元格

2、xlrd常用函数

(1)新建一个项目

(2)新建一个python文件

在index文件同级放入一个Excel文件

文件内容如下:

 (3)常用函数

导入xlrd模块

获取工作簿对象

检查工作表是否读取成功

获取所有的工作表对象

通过索引获取工作表对象

获取所有sheet表名称

通过名字获得工作表对象

获取工作表数量

以上方法我放到下面进行总结

data = xlrd.open_workbook("datatest.xls") #读取函数,括号里面是文件的绝对路径或者相对路径 这里接收工作簿对象
print(data.sheet_loaded(0)) #判断sheet0是否被加载
data.unload_sheet(0) #卸载sheet0
print(data.sheet_loaded(0)) #判断sheet0是否被加载
print(data.sheets()) #获取所有的工作表对象
print(data.sheets()[0]) #通过索引获取第一个工作表对象
print(data.sheet_by_index(0)) #通过索引获取第一个工作表对象
print(data.sheet_by_name("Sheet1")) #通过名字获取第一个工作表对象
print(data.sheet_names()) #打印所有的sheet表名字
print(data.nsheets) #打印工作簿sheet表数量

3、xlrd操作excel行

(1)获取sheet表对象

获取对象,打印行数

(2)操作行的数据

获取每一行的内容

获取每一行单元格的类型

其中:1表示字符串,2表示数字,3表示日期,4是布尔,5是错误

获取某行某列的单元格对象

获取某行某列单元格对象值

获取某行所有单元格的值

获取某行单元格的长度

以上方法我放到下面进行总结

#操作excel行
sheet = data.sheet_by_index(0) #获取第一个工作表
print(sheet.nrows) #获取当前sheet表的所有行数
print(sheet.row(0)) #打印第一行的数据(改行单元格对象组成的列表)
print(sheet.row(1)) #打印第二行的数据
print(sheet.row(2)) #打印第三行的数据
print(sheet.row_types(0)) #打印第一行单元格的类型(获取某行单元格的数据类型)
print(sheet.row_types(1)) #打印第二行单元格的类型
print(sheet.row_types(2)) #打印第三行单元格的类型
print(sheet.row(1)[2]) #获取某行某列的单元格对象
print(sheet.row(1)[2].value) #获取某行某列的单元格对象值
print(sheet.row_values(1)) #获取某行所有单元格的值
print(sheet.row_len(1)) #获取某行单元格的长度

4、excel操作列

(1)获取sheet表对象

获取sheet对象,打印列数

(2)操作列的数据

获取每一列的内容

获取某列某行单元格对象

获取某列某行单元格对象值

获取某列所有单元格的值

获取某列所有单元格的类型

以上方法我放到下面代码进行总结

#操作excel列
sheet = data.sheet_by_index(0) #获取第一个工作表sheet
print(sheet.ncols) #获取sheet的总列数
print(sheet.col(0)) #打印第一列的内容
print(sheet.col(1)) #打印第二列的内容
print(sheet.col(2)) #打印第三列的内容
print(sheet.col(0)[0]) #打印某列某行单元格对象
print(sheet.col(0)[0].value) #打印某列某行单元格对象值
print(sheet.col_values(0)) #获取某列所有单元格的值
print(sheet.col_types(1)) #获取某列所有单元格的类型

5、操作excel单元格

(1)获取sheet表对象

获取sheet表对象,获取单元格对象

打开excel发现,的确是年龄这个单元格

(2)操作excel单元格数据

 获取某个单元格的类型

获取单元格的值

以上方法我放到下面的代码里:

#操作excel单元格
sheet  = data.sheet_by_index(0) #获取sheet表对象
print(sheet.cell(0,1)) #获取某个cell单元格的内容
print(sheet.cell_type(0,1)) #获取某个cell单元格的类型
print(sheet.cell(0,1).ctype) #获取某个cell单元格的类型
print(sheet.cell(0,1).value) #获取某个cell单元格的值
print(sheet.cell_value(0,1)) #获取某个cell单元格的值

6、xlwt模块介绍

(1)介绍

  • xlwt为Python第三方模块,用来写入Excel表格数据
  • 按照:pip install xlwt
  • 导入:import xlwt

(2)安装检查

7、xlwt写入Excel

(1)xlwt写入Excel步骤

  • 创建工作簿
  • 创建工作表
  • 填充工作表内容
  • 保存文件

(2)创建writeExcel文件

创建sheet表并填充文本数据

首先,创建python文件并导入xlwt模块

(3)创建Excel文件

编写代码,代码如下:

#第一步:创建工作簿
wb = xlwt.Workbook()
#第二步:创建工作表
ws = wb.add_sheet("CNY")
#第三步:填充数据
ws.write_merge(0,1,0,5,"2023年货币兑换表")
#第四步:进行保存 只支持xls格式
wb.save("2023-CNY.xls")

将代码放到PyCharm进行运行

双击文件进行打开

继续利用元组填充数据:

打开文件

创建sheet表并填充图片数据

打开文件进行查看

 

以上方法我放到下面的代码里:

# Authour:Davy
# CreateTime:12-01
import xlwt
#第一步:创建工作簿
wb = xlwt.Workbook()
#第二步:创建工作表
ws = wb.add_sheet("CNY")
#第三步:填充数据
ws.write_merge(0,1,0,5,"2023年货币兑换表")
#写入货币数据
data = (("Date","英镑","人民币","港币","日元","美元"),
        ("01/01/2023",8.212121,1,0.876734,0.767676,6.8759),
        ("01/02/2023",8.222121,2,0.856734,0.967676,4.8759),
        ("01/03/2023",8.232121,3,0.836734,0.267676,5.8759),
        ("01/04/2023",8.242121,4,0.816734,0.167676,3.8759))
for i,item in enumerate(data):
    for j,val in enumerate(item):
        ws.write(i+2,j,val) #跳过前两行
#创建第二个工作表
wsImage = wb.add_sheet("image")
#写入图片
wsImage.insert_bitmap("2023.bmp",0,0) #从第一行第一列开始插入
#第四步:进行保存 只支持xls格式
wb.save("2023-CNY.xls")

8、写入格式化

这里我们学习xlwt常用的格式化设置

(1)定义一个初始化样式

(2)单元格对齐方式

(3)设置边框

(4)内容添加样式

打开文件进行查看

 (5)设置背景颜色

运行后打开文件进行查看

以上方法我放到下面的代码里:

# Authour:Davy
# CreateTime:12-01
import xlwt

#定义初始化样式
titlestyle = xlwt.XFStyle() #初始化样式
titlefont = xlwt.Font()
titlefont.name = "宋体"
titlefont.bold = True #加粗
titlefont.height = 11*20 #字号
titlefont.colour_index = 0x08 #字体颜色
titlestyle.font = titlefont

#单元格对齐方式
cellalign = xlwt.Alignment()
cellalign.horz = 0x02
cellalign.vert = 0x01
titlestyle.alignment = cellalign

#边框
borders = xlwt.Borders()
borders.right = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DOTTED
titlestyle.borders = borders

#背景颜色
datestyle = xlwt.XFStyle()
bgcolor = xlwt.Pattern()
bgcolor.pattern = xlwt.Pattern.SOLID_PATTERN
bgcolor.pattern_fore_colour = 22 #背景颜色
datestyle.pattern=bgcolor

#第一步:创建工作簿
wb = xlwt.Workbook()
#第二步:创建工作表
ws = wb.add_sheet("CNY")
#第三步:填充数据
ws.write_merge(0,1,0,5,"2023年货币兑换表",titlestyle)

#写入货币数据
data = (("Date","英镑","人民币","港币","日元","美元"),
        ("01/01/2023",8.212121,1,0.876734,0.767676,6.8759),
        ("01/02/2023",8.222121,2,0.856734,0.967676,4.8759),
        ("01/03/2023",8.232121,3,0.836734,0.267676,5.8759),
        ("01/04/2023",8.242121,4,0.816734,0.167676,3.8759))
for i,item in enumerate(data):
    for j,val in enumerate(item):
        if j == 0:
            ws.write(i+2,j,val,datestyle) #跳过前两行
        else:
            ws.write(i+2,j,val) #跳过前两行

#创建第二个工作表
wsImage = wb.add_sheet("image")
#写入图片
wsImage.insert_bitmap("2023.bmp",0,0) #从第一行第一列开始插入
#第四步:进行保存 只支持xls格式
wb.save("2023-CNY.xls")

9、实战

基于xlrd模块实现考试系统题库管理,Excel导入试题到数据库操作步骤

  • 通过xlrd模块读取Excel数据
  • 通过pymysql模块连接数据库
  • 组装数据、执行插入操作
  • 关闭数据库连接

(1)创建excelproject文件

(2)安装pymysql模块

(3)创建数据库助手类

首先,创建mysqlhelper类(需要先导入pymysql模块),代码如下

# Authour:Davy
# CreateTime:12-02
import pymysql

class dbhelper(): #这块暂时不用管,我先放这
    def __init__(self,host,port,user,passwd,db,charset="utf8"):
        self.host=host
        self.port=port
        self.user=user
        self.passwd=passwd
        self.db=db
        self.charset=charset
    #创建一个链接
    def connection(self):
        #1. 创建连接
        self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db,charset=self.charset)
        #2. 创建游标
        self.cur = self.conn.cursor()
    #关闭链接
    def closeconnection(self):
        self.cur.close()
        self.conn.close()
    #查询一条数据
    def getonedata(self,sql):
        try:
            self.connection()
            self.cur.execute(sql)
            result=self.cur.fetchone()
            self.closeconnection()
        except Exception:
            print(Exception)
        return result
    #查询多条数据
    def getalldata(self,sql):
        try:
            self.connection()
            self.cur.execute(sql)
            result=self.cur.fetchall()
            self.closeconnection()
        except Exception:
            print(Exception)
        return result
    #添加/修改/删除
    def executedata(self,sql):
        try:
            self.connection()
            self.cur.execute(sql)
            self.conn.commit()
            self.closeconnection()
        except Exception:
            print(Exception)
    #批量插入
    def executemanydata(self,sql,vals):
        try:
            self.connection()
            self.cur.executemany(sql,vals)
            self.conn.commit()
            self.closeconnection()
        except Exception as e:
            print(e)

 (4)数据库和表配置

首先需要去官网安装mysql:mysql下载地址

配置环境变量

复制mysql.exe所在bin目录,添加到Path变量里

检查版本

 数据库连接工具可以用你自己喜欢的,推荐navicat/datagrip

然后建立一个test库,创建一个question表

当然,你也可以通过语句创建表,前提是你sql语法比较熟悉

创建表的代码如下:

create table question
(
    id           int     default '' primary key comment '试题编号' ,
    subject      varchar(100) default '' not null comment '试题',
    questionType varchar(10) default '' not null comment '试题类型',
    optionA      varchar(50) default ''  not null comment '选项A',
    optionB      varchar(50) default ''  not null comment '选项B',
    optionC      varchar(50) default ''  not null comment '选项C',
    optionD      varchar(50) default ''  not null comment '选项D',
    score        int     default 0 not null comment '得分',
    constraint question_pk
        primary key (id)
)
    comment '试题库的表';

表结构如下:

(5)插入数据

执行后我们到数据库进行查看

数据已经有了,以上代码我放到下面

# Authour:Davy
# CreateTime:12-02
import xlrd

data = xlrd.open_workbook("试题表格.xls")
sheet = data.sheet_by_index(0) #获取到工作表
questionList = [] #构建试题列表

#试题类
class Question:
    pass
for i in range(sheet.nrows):
    if i > 0 : #试题从第一行开始的
        obj = Question() #构建试题对象
        obj.id = sheet.cell(i, 0).value  # 题号
        obj.subject = sheet.cell(i,1).value #题目
        obj.questionType = sheet.cell(i,2).value #题型
        obj.optionA =sheet.cell(i,3).value #选项A
        obj.optionB = sheet.cell(i,4).value #选项B
        obj.optionC = sheet.cell(i,5).value #选项C
        obj.optionD = sheet.cell(i, 6).value  # 选项D
        obj.score = sheet.cell(i,7).value #分值
        questionList.append(obj)

print(questionList)
#导入操作 pymysql pip install
from mysqlhelper import *
#1.链接到数据
db = dbhelper('127.0.0.1',3306,"root","123456","test")
#插入语句
sql = "insert into question(id,subject,questionType,optionA,optionB,optionC,optionD,score) values (%s,%s,%s,%s,%s,%s,%s,%s)"
val = [] #空列表来存储试题列表的元组
for item in questionList:
    val.append((int(item.id),item.subject,item.questionType,item.optionA,item.optionB,item.optionC,item.optionD,int(item.score)))
print(val[0])
print(val[1])
print(val[2])
db.executemanydata(sql,val) #执行sql语句

四、xlsxwriter生成图表

1、xlsxwriter模块介绍

  • xlsxwriter是Python第三方模块,用于向生成的Excel表格插入数据、图表等操作
  • 安装:pip install xlsxwriter
  • 导入:import xlsxwriter

优点

  • xlsxwriter较其他模块支持更多的Excel功能
  • 100%兼容Excel xlsx文件,支持Excel 2003、Excel 2007等版本
  • xlsxwriter处理速度更快,支持大文件写入

2、写入文本到excel

xlsxwriter模块使用,写入文本、图片、超链接等,我们新建一个项目

 xlsxwriter的安装导入步骤和之前模块安装导入一样,我不重复演示了,下面来创建工作簿和表

写入一个表格数据

打开文件进行查看

下面代码展示怎么求和、插入链接和图片

打开文件进行查看

下面是以上方法的代码

# Authour:Davy
# CreateTime:12-03
import xlsxwriter
wb = xlsxwriter.Workbook("data.xlsx")
#创建sheet
sheet = wb.add_worksheet("newsheet")
#写入
sheet.write(0,0,"2023年度") #写入单元格数据
sheet.merge_range(1,0,2,2,"第一季度工单统计")
data = (
    ["一月份",500,450],
    ["二月份",600,450],
    ["三月份",700,550],
)
sheet.write_row(3,0,["月份","总工单数量","已处理工单数量"]) #创建表格标题列
#写入数据
for index,item in enumerate(data):
    sheet.write_row(index+4,0,item)
#写入excel求和公式
sheet.write(7,1,"=sum(B5:B7)")
sheet.write(7,2,"=sum(C5:C7)")
sheet.write_url(9,0,"http://www.baidu.com", string = "工单数据")
sheet.insert_image(10,0,"view.png") #插入图片
wb.close()

3、写入格式化配置

这节我们介绍一下,写入格式化配置

打开文件进行查看

设置其他格式内容

打开文件

以上方法的代码我放到下面:

# Authour:Davy
# CreateTime:12-03
import xlsxwriter
wb = xlsxwriter.Workbook("data.xlsx")
cell_format = wb.add_format({'bold':True}) #通过构造方法增加格式对象
cell_format1 = wb.add_format() #格式对象
cell_format1.set_bold() #设置加粗
cell_format1.set_font_color("red") #文本的颜色
cell_format1.set_font_size(14)
cell_format1.set_align("center") #对齐方式
cell_format2 = wb.add_format() #格式对象
cell_format2.set_bg_color("#808080") #设置背景颜色
#创建sheet
sheet = wb.add_worksheet("newsheet")
#写入
sheet.write(0,0,"2023年度",cell_format) #写入单元格数据
sheet.merge_range(1,0,2,2,"第一季度工单统计",cell_format1)
data = (
    ["一月份",500,450],
    ["二月份",600,450],
    ["三月份",700,550],
)
sheet.write_row(3,0,["月份","总工单数量","已处理工单数量"],cell_format2) #创建表格标题列
#写入数据
for index,item in enumerate(data):
    sheet.write_row(index+4,0,item)
#写入excel求和公式
sheet.write(7,1,"=sum(B5:B7)")
sheet.write(7,2,"=sum(C5:C7)")
sheet.write_url(9,0,"http://www.baidu.com", string = "工单数据")
sheet.insert_image(10,0,"view.png") #插入图片
wb.close()

4、写入图表到Excel

打开文件进行查看

增加图表数字提醒

打开文件进行查看

改变图标类型,变为折线图模式

打开文件进行查看

以上方法代码我放到下面

# Authour:Davy
# CreateTime:12-03
import xlsxwriter
wb = xlsxwriter.Workbook("data.xlsx")
cell_format = wb.add_format({'bold':True}) #通过构造方法增加格式对象
cell_format1 = wb.add_format() #格式对象
cell_format1.set_bold() #设置加粗
cell_format1.set_font_color("red") #文本的颜色
cell_format1.set_font_size(14)
cell_format1.set_align("center") #对齐方式
cell_format2 = wb.add_format() #格式对象
cell_format2.set_bg_color("#808080") #设置背景颜色
#创建sheet
sheet = wb.add_worksheet("newsheet")
#写入
sheet.write(0,0,"2023年度",cell_format) #写入单元格数据
sheet.merge_range(1,0,2,2,"第一季度工单统计",cell_format1)
data = (
    ["一月份",500,450],
    ["二月份",600,450],
    ["三月份",700,550],
)
sheet.write_row(3,0,["月份","总工单数量","已处理工单数量"],cell_format2) #创建表格标题列
#写入数据
for index,item in enumerate(data):
    sheet.write_row(index+4,0,item)
#写入excel求和公式
sheet.write(7,1,"=sum(B5:B7)")
sheet.write(7,2,"=sum(C5:C7)")
sheet.write_url(9,0,"http://www.baidu.com", string = "工单数据")
sheet.insert_image(10,0,"view.png") #插入图片
#写入图表
#chart = wb.add_chart({'type':'column'}) #创建图表对象:柱状图
chart = wb.add_chart({'type':'line'}) #创建图表对象:折线图
chart.set_title({'name':'第一季度工单统计'})
#X Y 描述信息
chart.set_x_axis({'name':'月份'})
chart.set_x_axis({'name':'工单数'})
#图表数据
chart.add_series({
    'name':'总工单数量',
    'categories':'=newsheet!$A$5:$A$7',
    'values':['newsheet',4,1,6,1],
    'data_labels':{'value':True}
})
chart.add_series({
    'name':'已处理工单数量',
    'categories':'=newsheet!$A$5:$A$7',
    'values':['newsheet',4,2,6,2],
    'data_labels':{'value':True}
})
sheet.insert_chart('F2',chart) #插入图表对象
wb.close()

5、综合实践-需求分析

需求:根据实际的计算机班就业数据Excel生成平均薪资图表,并邮件发送(Excel需要手动做一个,下节我会展示)

  • 第一步:xlrd模块读取Excel数据
  • 第二步:xlsxwriter模块生成就业数据图表
  • 第三步:smtplib模块发送附件邮件

smtplib模块对smtp协议进行了封装,提供更便捷的方式发送电子邮件

6、综合实战-数据分析

(1)数据准备

新建一个excelproject.py文件

提前拷贝就业数据到项目中

就业数据如下,我们只看三个班级

(2)获取平均薪资数据

(3)生成平均薪资数据

查看文件

 

(4)生成平均薪资数据图表

查看文件

有人说,你这个,我点几下鼠标就好了,你还要写代码,其实数据少的时候点几下鼠标就可以完成,但如果每天要从数百张表格中提取数据,合成计算,然后再发给同一个人,每天要重复这样的事情的话,就体现出Python办公自动化的用处了

(5)发送邮箱

首先需要安装模块smtplib并且导入构建附件需要的包模块

设置邮箱

设置-账户-开启服务

构建附件

SMTP封装发送

进入邮箱查看

打开附件

以上代码我放到下面

# Authour:Davy
# CreateTime:12-04
import xlrd
import xlsxwriter
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

# 1.读取
data = xlrd.open_workbook('info_student.xls')
classinfo = []
for sheet in data.sheets():
    dict = {'name': sheet.name, 'avgsalary': 0}  # 班级信息和平均薪资
    sum = 0
    for i in range(sheet.nrows):
        if i > 1:  # 从第二行开始取数据
            sum += float(sheet.cell(i, 5).value)  # 得到薪资数据进行累加
    dict['avgsalary'] = sum / (sheet.nrows - 2)  # 获取平均薪资进行存储
    classinfo.append(dict)
print(classinfo)

# 2.写入excel
workbook = xlsxwriter.Workbook('newinfo_student.xlsx')
sheet = workbook.add_worksheet()  # 创建工作表
# 写入班级数据
nameinfo = []
salaryinfo = []
for item in classinfo:
    nameinfo.append(item['name'])
    salaryinfo.append(item['avgsalary'])
sheet.write_column('A1', nameinfo)
sheet.write_column('B1', salaryinfo)

# 写入图表
chart = workbook.add_chart({'type': 'column'})
# 标题
chart.set_title({'name': '平均就业薪资'})
# 数据源
chart.add_series({
    'name': '班级',
    'categories': '=Sheet1!$A$1:$A$3',
    'values': '=Sheet1!$B$1:$B$3'
})
sheet.insert_chart('A7', chart)

# 3.发送邮件
host_server = 'smtp.qq.com'  # 主机地址
# 发件人邮箱
sender = "1225388547@qq.com"  # 注意这个邮箱需要开启smtp的服务
# 发件人邮箱密码、授权码
code = "yxsinoobjpaviiaa"
# 收件人
user = "zuowei.hu@wbstar.com"
# 准备邮件数据
# 邮件标题
mail_title = "-----计算机学院平均就业薪资-----"
# 内容
mail_cotent = "计算机学院平均就业薪资,请具体查看附件"
# 构建附件
attachment = MIMEApplication(open('newinfo_student.xlsx', 'rb').read())  # 读取数据,构建附件
attachment.add_header('Content-Disposition', 'attachment', filename='jobdata.xlsx')  # 附件头部信息
# SMTP
smtp = smtplib.SMTP(host_server)
# 登录
smtp.login(sender, code)
# 发送
msg = MIMEMultipart()  # 带附件的实例
msg['Subject'] = mail_title  # 实例标题
msg['From'] = sender  # 发送者信息
msg['To'] = user  # 接收者信息
msg.attach((MIMEText(mail_cotent)))  # 正文
msg.attach(attachment)
smtp.sendmail(sender, user, msg.as_string())
workbook.close()  # 释放资源

五、Word自动化

1、python-docx模块介绍与安装

Word使用常见场景

  • 场景一:手动创建批量制式Word文件,如合同、资讯等
  • 场景二:修改现有大量Word文件存在的共性问题

python-docx为Python第三方模块,用于自动化生成和修改Word文档

  • 安装:pip install python-docx
  • 导入:import docx

2、写入文本到Word

创建一个新的项目,名为:projectPythonDocx,和一个新的文件:writeword

(1)创建标题和文档

查看文件

(2)插入新的段落

p1.insert_paragraph_before("注意看") #插入新的段落

(3)格式化段落

打开文件

(4)设置字体格式

打开文件

以上代码我放到下面

# Authour:Davy
# CreateTime:12-07

from docx import Document
from docx.shared import Pt, RGBColor

# 1.创建一个文档对象
document = Document()  # 新建文档对象
# Document("info.docx") 读取现有的word 建立文档对象
# 2.写入内容
document.add_heading("星星充电简介", level=4)
# 段落
text = "星星充电是亚洲数字能源领域头部独角兽," \
       "也是万帮数字能源的核心品牌之一,为全球客户提供设备、平台、用户和数据运营服务,借助车辆销售、私人充电、公共充电、金融保险等业务打造用户充电全生命周期平台," \
       "通过“一端能源互联,一端产业互联”的企业战略,最终实现“推动人类交通电动化,引领全球能源数字化”的长远梦想。 " \
       "星星充电曾获国家能源局“能源互联网重大应用示范”项目、国家工信部“智能制造2025新模式应用”项目、国家科技部重点研发项目、" \
       "工信部绿色制造系统集成项目等多个国家级项目,入选国家级示范平台;并牵头成立新能源汽车智慧能源装备创新中心," \
       "也曾获得极具专业含金量的ASPICE CL1认证、IATF16949和VDA6.3认证,持续申请研发专利超400件。 星星充电是全球60多家知名车企充电生态战略合作伙伴," \
       "作为充电领域的国标制定单位,星星充电参与了国内所有充电标准的起草,并作为中方代表参与IEC国际标准的起草," \
       "同时也是国家标准委员会指定的国内大功率充电两家牵头单位之一。 " \
       "2020年,星星充电首创提出“移动能源网”概念:借助于移动的交通工具、移动的能源载体、移动的补能设施和移动的通讯终端所构建的时空泛在能源互联网络。" \
       "创新“云管端”即“硬件+软件+服务”的商业模式,堪称数字能源生态中国样本。在提高能源利用效率,促进结构调整和节能减排,助力民族汽车工业屹立于世界之巅," \
       "推动国家新能源产业发展壮大的事业上,星星充电永远不遗余力。"
p1 = document.add_paragraph(text)
p1.insert_paragraph_before("注意看")  # 插入新的段落
# 段落格式
format = p1.paragraph_format
# 左右缩进
format.left_indent = Pt(20)
format.right_indent = Pt(20)
format.first_line_indent = Pt(20)  # 首行缩进
# 行间距
format.line_spacing = 1.5
# 字体、字号、文字颜色
run = p1.add_run('星星充电是亚洲数字能源领域头部独角兽')
run.font.size = Pt(12)
run.font.name = '微软雅黑'
run.font.color.rgb = RGBColor(235, 33, 24)
# 加粗、下划线、斜体
run1 = p1.add_run('也是万帮数字能源的核心品牌之一')
run1.bold = True
run1.font.underline = True
run1.font.italic = True
# 3.保存文档
document.save("info.docx")

3、写入表格与图片

插入图片和表格

查看文件

获取表格

以上代码我放到下面

# Authour:Davy
# CreateTime:12-07

from docx import Document
from docx.shared import Pt, RGBColor

# 1.创建一个文档对象
document = Document()  # 新建文档对象
# Document("info.docx") 读取现有的word 建立文档对象
# 2.写入内容
document.add_heading("星星充电简介", level=4)
# 段落
text = "星星充电是亚洲数字能源领域头部独角兽," \
       "也是万帮数字能源的核心品牌之一,为全球客户提供设备、平台、用户和数据运营服务,借助车辆销售、私人充电、公共充电、金融保险等业务打造用户充电全生命周期平台," \
       "通过“一端能源互联,一端产业互联”的企业战略,最终实现“推动人类交通电动化,引领全球能源数字化”的长远梦想。 " \
       "2020年,星星充电首创提出“移动能源网”概念:借助于移动的交通工具、移动的能源载体、移动的补能设施和移动的通讯终端所构建的时空泛在能源互联网络。" \
       "创新“云管端”即“硬件+软件+服务”的商业模式,堪称数字能源生态中国样本。在提高能源利用效率,促进结构调整和节能减排,助力民族汽车工业屹立于世界之巅,"
p1 = document.add_paragraph(text)
p1.insert_paragraph_before("注意看")  # 插入新的段落
# 段落格式
format = p1.paragraph_format
# 左右缩进
format.left_indent = Pt(20)
format.right_indent = Pt(20)
format.first_line_indent = Pt(20)  # 首行缩进
# 行间距
format.line_spacing = 1.5
# 字体、字号、文字颜色
run = p1.add_run('同时也是国家标准委员会指定的国内大功率充电两家牵头单位之一。')
run.font.size = Pt(12)
run.font.name = '微软雅黑'
run.font.color.rgb = RGBColor(235, 33, 24)
# 加粗、下划线、斜体
run1 = p1.add_run('推动国家新能源产业发展壮大的事业上,星星充电永远不遗余力。')
run1.bold = True
run1.font.underline = True
run1.font.italic = True
# 插入图片
document.add_picture('starcharge.png', Pt(400), Pt(50))
# 插入表格
table = document.add_table(rows=1, cols=3)
header_cells = table.rows[0].cells
header_cells[0].text = '充电行业龙头'
header_cells[1].text = '地位'
header_cells[2].text = '性质'
# 数据
data = (
    ['星星充电', '国际化独角兽', '名营'],
    ['特来电', '国内前三', '名营'],
    ['国家电网', '国有企业', '国有企业']
)
for item in data:
    rows_cells = table.add_row().cells  # 给表格增加行
    rows_cells[0].text = item[0]
    rows_cells[1].text = item[1]
    rows_cells[2].text = item[2]
# 获取表格
print(len(document.tables[0].rows))  # 打印总行数
print(len(document.tables[0].columns))  # 打印总列数
# cell
print(document.tables[0].cell(0, 1).text)
# 3.保存文档
document.save("info.docx")

4、Word样式处理

(1)自定义样式

查看文件

样式定义好后可以在文档各个地方进行应用,比run这种方式通用

(2)添加内置样式

查看文件

其他内置样式可以参考一下官网

(3)删除样式

document.styles['textstyle'].delete() #删除样式

 以上代码我放到下面

# Authour:Davy
# CreateTime:12-07

from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.style import WD_STYLE_TYPE

# 1.创建一个文档对象
document = Document()  # 新建文档对象
# Document("info.docx") 读取现有的word 建立文档对象
# 2.写入内容
document.add_heading("星星充电简介", level=4)
# 样式
style = document.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH)
print(style.style_id)
print(style.name)
style.font.size = Pt(5)
# 段落
text = "星星充电是亚洲数字能源领域头部独角兽," \
       "也是万帮数字能源的核心品牌之一,为全球客户提供设备、平台、用户和数据运营服务,借助车辆销售、私人充电、公共充电、金融保险等业务打造用户充电全生命周期平台," \
       "通过“一端能源互联,一端产业互联”的企业战略,最终实现“推动人类交通电动化,引领全球能源数字化”的长远梦想。 " \
       "2020年,星星充电首创提出“移动能源网”概念:借助于移动的交通工具、移动的能源载体、移动的补能设施和移动的通讯终端所构建的时空泛在能源互联网络。" \
       "创新“云管端”即“硬件+软件+服务”的商业模式,堪称数字能源生态中国样本。在提高能源利用效率,促进结构调整和节能减排,助力民族汽车工业屹立于世界之巅,"
p1 = document.add_paragraph(text, style='textstyle')
p1.insert_paragraph_before("注意看")  # 插入新的段落
# 段落格式
format = p1.paragraph_format
# 左右缩进
format.left_indent = Pt(20)
format.right_indent = Pt(20)
format.first_line_indent = Pt(20)  # 首行缩进
# 行间距
format.line_spacing = 1.5
# 字体、字号、文字颜色
run = p1.add_run('同时也是国家标准委员会指定的国内大功率充电两家牵头单位之一。')
run.font.size = Pt(12)
run.font.name = '微软雅黑'
run.font.color.rgb = RGBColor(235, 33, 24)
# 加粗、下划线、斜体
run1 = p1.add_run('推动国家新能源产业发展壮大的事业上,星星充电永远不遗余力。')
run1.bold = True
run1.font.underline = True
run1.font.italic = True
# 插入图片
document.add_picture('starcharge.png', Pt(400), Pt(50))
# 插入表格
table = document.add_table(rows=1, cols=3, style='Medium List 1')
header_cells = table.rows[0].cells
header_cells[0].text = '充电行业龙头'
header_cells[1].text = '地位'
header_cells[2].text = '性质'
# 数据
data = (
    ['星星充电', '国际化独角兽', '名营'],
    ['特来电', '国内前三', '名营'],
    ['国家电网', '国有企业', '国有企业']
)
for item in data:
    rows_cells = table.add_row().cells  # 给表格增加行
    rows_cells[0].text = item[0]
    rows_cells[1].text = item[1]
    rows_cells[2].text = item[2]
# 获取表格
print(len(document.tables[0].rows))  # 打印总行数
print(len(document.tables[0].columns))  # 打印总列数
# cell
print(document.tables[0].cell(0, 1).text)

# 3.保存文档
document.save("info.docx")

5、Word转换PDF

(1)单个文件的转换

新建一个文件:wordtopdf,首先需要安装pywin32模块

打开文件进行查看

(2)多个文件的转换

首先删除pdf文件,复制多个word文件出来进行转换

然后批量转换

查看文件

以上代码我放到下面:

import os

from win32com.client import constants, gencache


def createpdf(wordPath, pdfPath):
    word = gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(wordPath, ReadOnly=1)
    # 转换方法
    doc.ExportAsFixedFormat(pdfPath, constants.wdExportFormatPDF)
    word.Quit()


# # 单个文件的转换
# createpdf('D:/PythonProject/projectPythonDocx/projectPythonDocx/info.docx',
#           'D:/PythonProject/projectPythonDocx/projectPythonDocx/info.pdf')
# 多个文件的转换
print(os.listdir('.'))
wordfiles = []  # 用来存word文件
for file in os.listdir('.'):
    if file.endswith(('.doc', '.docx')):
        wordfiles.append(file)
print(wordfiles)  # 检查是否获取到word文件

for file in wordfiles:  # 通过遍历的方式进行批量转换
    filepath = os.path.abspath(file)  # 获取文件路径
    index = filepath.rindex('.')  # 获取.后缀索引
    pdfpath = filepath[:index] + '.pdf'  # 拼接目标路径
    print(filepath)
    print(pdfpath)
    createpdf(filepath, pdfpath)

6、综合实战-需求分析

有一份Excel的试题库,我们把它随机生成word试卷

  • xlrd模块读取Excel数据
  • 随机试题与选项顺序
  • python-docx模块生成Word试卷文件

7、综合实战-生成Word试卷

新建一个wordproject文件,导入需要的模块

(1)读取试题数据

(2)生成word试卷

打开文件查看

以上代码我放到下面:

# Authour:Davy
# CreateTime:12-09
import random

import xlrd
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH

# 1.读取Excel
data = xlrd.open_workbook('examination.xls')
sheet = data.sheet_by_index(0)  # 获取工作表


class Question:  # 试题类
    pass


def createQuestion():  # 构建试卷列表
    questionslist = []
    for i in range(sheet.nrows):
        if i > 1:  # 前两行无效
            obj = Question()  # 试题对象
            obj.subject = sheet.cell(i, 1).value  # 题目
            obj.questiontype = sheet.cell(i, 2).value  # 题型
            obj.option = []
            obj.option.append(sheet.cell(i, 3).value)  # 选项A
            obj.option.append(sheet.cell(i, 4).value)  # 选项B
            obj.option.append(sheet.cell(i, 5).value)  # 选项C
            obj.option.append(sheet.cell(i, 6).value)  # 选项D
            obj.score = sheet.cell(i, 7).value  # 分值
            questionslist.append(obj)  # 将每行的试题进行存储
    random.shuffle(questionslist)  # 将试题列表所有的元素随机排序
    return questionslist


# 生成word试卷
def createPaper(filename, papername, questionslist):  # 三个参数:文件名称、试卷名称、试题列表
    document = Document()
    # 页眉页脚的信息
    section = document.sections[0]
    header = section.header
    pheader = header.paragraphs[0]
    pheader.text = papername
    footer = section.footer
    pfooter = footer.paragraphs[0]
    pfooter.text = "内部试题,禁止泄露"
    # 试卷基本信息
    title = document.add_heading(papername, level=1)
    title.alignment = WD_ALIGN_PARAGRAPH.CENTER
    pinformation = document.add_paragraph()
    pinformation.add_run('姓名:________')
    pinformation.add_run('所属部门:________')
    pinformation.alignment = WD_ALIGN_PARAGRAPH.CENTER
    # 试题信息
    for question in questionslist:
        subject = document.add_paragraph(style='List Number')  # 显示带序号的标题
        run = subject.add_run(question.subject)  # 题构建目
        run.bold = True  # 加粗
        subject.add_run('【%s】分' % str(question.score))
        random.shuffle(question.option)  # 打乱选项的顺序
        for index, option in enumerate(question.option):
            document.add_paragraph('ABCD'[index] + str(option))  # 依次添加四个选项
    document.save(filename)


questionlist = createQuestion()  # 获取试卷列表
createPaper('IT服务部考试试卷.docx', '2023年IT服务部内部考试', questionlist)

六、PPT自动化

1、PPTX模块介绍与安装

  • python-pptx为Python第三方模块,用于自动化生成和更新PowerPoint(.pptx)文件
  • 安装:pip install python-pptx
  • import pptx

2、写入文本到PPT

首先,创建一个新项目和新文件,项目名称为projectPythonPPTX,文件名为writeppt

(1)创建一个新的ppt

打开文件进行查看

(2)加载已有ppt另存

(3)添加不同的幻灯片

打开文件进行查看

(3)删除幻灯片

(4)添加文本

打开文件进行查看

以上代码我放到下面

# Authour:Davy
# CreateTime:12-10
import pptx
from pptx.util import Inches

# 步骤一:得到演示文稿的对象
prs = pptx.Presentation('test.pptx')
# 步骤二:写入操作
slide = prs.slides.add_slide(prs.slide_layouts[0])  # 添加幻灯片
# prs.slides.add_slide(prs.slide_layouts[1])  # 添加幻灯片
# prs.slides.add_slide(prs.slide_layouts[2])  # 添加幻灯片
# 删除幻灯片
# print(len(prs.slides))
# del prs.slides._sldIdLst[1]
# print(len(prs.slides))
# 添加文本
textslide = slide.shapes.add_textbox(Inches(5), Inches(5), Inches(5), Inches(5))
textslide.text = "我是文本框"
pslide = textslide.text_frame.add_paragraph()
pslide.text = '我是段落'
pslide.add_run().text = 'end'
title_shape = slide.shapes.title
title_shape.text = '标题1'
slide.shapes.placeholders[1].text = '标题2'

# 步骤三:保存PPT文件
prs.save('test.pptx')

3、添加图形到PPT

打开文件进行查看

以上代码我放到下面

# Authour:Davy
# CreateTime:12-10
import pptx
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_SHAPE
from pptx.dml.color import RGBColor

# 步骤一:得到演示文稿的对象
prs = pptx.Presentation('test.pptx')
# 步骤二:写入操作
slide = prs.slides.add_slide(prs.slide_layouts[0])  # 添加幻灯片
# prs.slides.add_slide(prs.slide_layouts[1])  # 添加幻灯片
# prs.slides.add_slide(prs.slide_layouts[2])  # 添加幻灯片
# 删除幻灯片
# print(len(prs.slides))
# del prs.slides._sldIdLst[1]
# print(len(prs.slides))
# 添加文本
textslide = slide.shapes.add_textbox(Inches(5), Inches(5), Inches(5), Inches(5))
textslide.text = "我是文本框"
pslide = textslide.text_frame.add_paragraph()
pslide.text = '我是段落'
pslide.add_run().text = 'end'
title_shape = slide.shapes.title
title_shape.text = '标题1'
slide.shapes.placeholders[1].text = '标题2'
# 添加自选图形
shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(2), Inches(2), Inches(5), Inches(3))
# 填充、边框
fill = shape.fill
fill.solid()
fill.fore_color.rgb = RGBColor(255, 0, 0)
line = shape.line
line.color.rgb = RGBColor(55, 3, 5)
line.width = Pt(2)
# 步骤三:保存PPT文件
prs.save('test.pptx')

4、写入表格到PPT

(1)添加表格

查看文件

(2)合并单元格

打开文件进行查看

(3)取消单元格合并

打开文件进行查看

以上代码我放到下面

# Authour:Davy
# CreateTime:12-10
import pptx
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_SHAPE
from pptx.dml.color import RGBColor

# 步骤一:得到演示文稿的对象
prs = pptx.Presentation('test.pptx')
# 步骤二:写入操作
slide = prs.slides.add_slide(prs.slide_layouts[0])  # 添加幻灯片
# prs.slides.add_slide(prs.slide_layouts[1])  # 添加幻灯片
# prs.slides.add_slide(prs.slide_layouts[2])  # 添加幻灯片
# 删除幻灯片
# print(len(prs.slides))
# del prs.slides._sldIdLst[1]
# print(len(prs.slides))
# 添加文本
textslide = slide.shapes.add_textbox(Inches(5), Inches(5), Inches(5), Inches(5))
textslide.text = "我是文本框"
pslide = textslide.text_frame.add_paragraph()
pslide.text = '我是段落'
pslide.add_run().text = 'end'
title_shape = slide.shapes.title
title_shape.text = '标题1'
slide.shapes.placeholders[1].text = '标题2'
# 添加自选图形
shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(2), Inches(2), Inches(5), Inches(3))
# 填充、边框
fill = shape.fill
fill.solid()
fill.fore_color.rgb = RGBColor(255, 0, 0)
line = shape.line
line.color.rgb = RGBColor(55, 3, 5)
line.width = Pt(2)
# 添加表格
table = slide.shapes.add_table(3, 3, Inches(2), Inches(2), Inches(4), Inches(2)).table
# 填充内容
table.cell(1, 0).text = 'name'
table.cell(1, 1).text = 'age'
table.cell(1, 2).text = 'class'
table.cell(2, 0).text = '小未'
table.cell(2, 1).text = '25'
table.cell(2, 2).text = '一班'
# 合并单元格
cell = table.cell(0, 0)
cellnew = table.cell(0, 2)
cell.merge(cellnew)
table.cell(0, 0).text = '人员信息'  # 第一行
print(cell.is_merge_origin)  # 查看单元格是否合并
cell.split()  # 取消合并
print(cell.is_merge_origin)
# 步骤三:保存PPT文件
prs.save('test.pptx')

5、写入图表到PPT

打开文件进行查看

以上代码我放到下面

# Authour:Davy
# CreateTime:12-10
import pptx
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_SHAPE
from pptx.dml.color import RGBColor
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.enum.chart import XL_LEGEND_POSITION

# 步骤一:得到演示文稿的对象
prs = pptx.Presentation('test.pptx')
# 步骤二:写入操作
slide = prs.slides.add_slide(prs.slide_layouts[0])  # 添加幻灯片
# prs.slides.add_slide(prs.slide_layouts[1])  # 添加幻灯片
# prs.slides.add_slide(prs.slide_layouts[2])  # 添加幻灯片
# 删除幻灯片
# print(len(prs.slides))
# del prs.slides._sldIdLst[1]
# print(len(prs.slides))
# # 添加文本
# textslide = slide.shapes.add_textbox(Inches(5), Inches(5), Inches(5), Inches(5))
# textslide.text = "我是文本框"
# pslide = textslide.text_frame.add_paragraph()
# pslide.text = '我是段落'
# pslide.add_run().text = 'end'
# title_shape = slide.shapes.title
# title_shape.text = '标题1'
# slide.shapes.placeholders[1].text = '标题2'
# # 添加自选图形
# shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(2), Inches(2), Inches(5), Inches(3))
# # 填充、边框
# fill = shape.fill
# fill.solid()
# fill.fore_color.rgb = RGBColor(255, 0, 0)
# line = shape.line
# line.color.rgb = RGBColor(55, 3, 5)
# line.width = Pt(2)
# # 添加表格
# table = slide.shapes.add_table(3, 3, Inches(2), Inches(2), Inches(4), Inches(2)).table
# # 填充内容
# table.cell(1, 0).text = 'name'
# table.cell(1, 1).text = 'age'
# table.cell(1, 2).text = 'class'
# table.cell(2, 0).text = '小未'
# table.cell(2, 1).text = '25'
# table.cell(2, 2).text = '一班'
# # 合并单元格
# cell = table.cell(0, 0)
# cellnew = table.cell(0, 2)
# cell.merge(cellnew)
# table.cell(0, 0).text = '人员信息'  # 第一行
# print(cell.is_merge_origin)  # 查看单元格是否合并
# cell.split()  # 取消合并
# print(cell.is_merge_origin)
# 写入图表
chart_data = CategoryChartData()
chart_data.categories = ['一月份', '二月份', '三月份']  # X轴
chart_data.add_series('Y2023', (300, 400, 500))
chart_data.add_series('Y2024', (400, 500, 900))
chart = slide.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, Inches(2), Inches(2), Inches(6), Inches(4),
                               chart_data).chart  # 柱状图,折线图使用XL_CHART_TYPE.LINE
chart.has_title = True
chart.chart_title.text_frame.text = '第一季度工单量'  # 标题
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.RIGHT
# 步骤三:保存PPT文件
prs.save('test.pptx')

6、实战-需求分析

通过数据生成一个充电桩消费者洞察报告

7、实战-充电桩消费者洞察报告

创建一个新的python文件并引入所需要的包

(1)编写封面

(2)编写目录

(3)编写表格

(4)编写偏好趋势

(5)编写用户画像

(6)结尾

以上代码我放到下面

# Authour:Davy
# CreateTime:12-10
import pptx
from pptx.util import Inches, Pt
from pptx.enum.shapes import MSO_SHAPE
from pptx.dml.color import RGBColor
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.enum.chart import XL_LEGEND_POSITION

prs = pptx.Presentation()
# 第一页:封面
slide1 = prs.slides.add_slide(prs.slide_layouts[0])
slide1.shapes.title.text = '充电桩消费者洞察报告'
slide1.shapes.placeholders[1].text = '2023年第一季度'
# 第二页:目录
slide2 = prs.slides.add_slide(prs.slide_layouts[1])
slide2.shapes.title.text = '目录'
content = slide2.shapes.placeholders[1].text_frame
content.add_paragraph().text = '充电桩第一季度销售榜单'
content.add_paragraph().text = '充电桩用户消费偏好趋势'
content.add_paragraph().text = '充电桩消费者用户画像'
# 第三页:表格
slide3 = prs.slides.add_slide(prs.slide_layouts[1])
slide3.shapes.title.text = '充电桩第一季度销售榜单'
table = slide3.shapes.add_table(11, 4, Inches(0), Inches(1.4), Inches(10), Inches(6)).table
# 写入内容
table.cell(0, 0).text = '排名'
table.cell(0, 1).text = '充电桩类型'
table.cell(0, 2).text = '所属厂商'
table.cell(0, 3).text = '排名'
data = [{'type': '交流A', 'base': 'starcharge', 'total': 50000},
        {'type': '交流B', 'base': 'starcharge', 'total': 46401},
        {'type': '交流C', 'base': 'starcharge', 'total': 43400},
        {'type': '交流D', 'base': 'starcharge', 'total': 41000},
        {'type': '直流A', 'base': 'starcharge', 'total': 40000},
        {'type': '直流B', 'base': 'starcharge', 'total': 39800},
        {'type': '直流C', 'base': 'starcharge', 'total': 35700},
        {'type': '直流D', 'base': 'starcharge', 'total': 34000},
        {'type': '交直流A', 'base': 'starcharge', 'total': 22000},
        {'type': '交直流B', 'base': 'starcharge', 'total': 21000}]

for i in range(11):
    if i > 0:
        text = str(i+1)
        table.cell(i, 0).text = str(i)
        table.cell(i, 1).text = data[i-1]['type']
        table.cell(i, 2).text = data[i-1]['base']
        table.cell(i, 3).text = str(data[i-1]['total'])
# 第四页:偏好趋势
slide4 = prs.slides.add_slide(prs.slide_layouts[1])
slide4.shapes.title.text = '充电桩用户消费偏好趋势'
shape1 = slide4.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(1), Inches(1.5), Inches(3), Inches(2.5))
fill = shape1.fill
fill.solid()
fill.fore_color.rgb = RGBColor(51, 102, 255)
shape1.text_frame.add_paragraph().text = '类型偏好:'
p1 = shape1.text_frame.add_paragraph()
p1.text = '快速充电型'
p1.font.size = Pt(35)
shape2 = slide4.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(4), Inches(1.5), Inches(5), Inches(2.5))
fill = shape2.fill
fill.solid()
fill.fore_color.rgb = RGBColor(0, 184, 255)
shape2.text_frame.add_paragraph().text = '价位偏好:'
p2 = shape2.text_frame.add_paragraph()
p2.text = '环保节约型'
p2.font.size = Pt(35)
shape3 = slide4.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(1), Inches(4), Inches(8), Inches(2.5))
fill = shape3.fill
fill.solid()
fill.fore_color.rgb = RGBColor(112, 219, 255)
shape3.text_frame.add_paragraph().text = '型号偏好'
p3 = shape3.text_frame.add_paragraph()
p3.text = '交直流混合型'
p3.font.size = Pt(35)

# 第五页:用户画像
slide5 = prs.slides.add_slide(prs.slide_layouts[1])
slide5.shapes.title.text = '充电桩消费者用户画像'
chart_data = CategoryChartData()
chart_data.categories = ['70后', '80后', '90后']
chart_data.add_series('各年龄段平均充电花费', (40, 45, 25))

slide5.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED, Inches(1), Inches(2.5), Inches(4), Inches(3), chart_data
)
chart_data1 = CategoryChartData()
chart_data1.categories = ['男', '女', ]
chart_data1.add_series('性别分别', (65, 35))

chart = slide5.shapes.add_chart(
    XL_CHART_TYPE.PIE, Inches(6), Inches(2.5), Inches(3), Inches(3), chart_data1
).chart
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.RIGHT
# 第六页
slide6 = prs.slides.add_slide(prs.slide_layouts[0])
slide6.shapes.title.text = '谢谢!'
prs.save('report.pptx')

七、总结

我们学习了Python对Excel、PPT、Word的基本操作,涉及的主要模块有:

  • xlrd
  • xlwt
  • xlsxwriter
  • python-docx
  • python-pptx

大家可以自己整理一下,后续有空会出一期Python的其他内容

  • 37
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值