为了账号安全,请及时绑定邮箱和手机立即绑定

<自动化办公> 两秒完成250页豆瓣电影PPT

标签:
Java Python

PPT并不好用, 但还是得用它, 这里借用豆瓣Top250的电影信息, 利用python-pptx (0.6.7)自动生成250张PPT, 希望通过实例, 给常年整理PPT报表的上班族, 一个解放生产力的新思路


最终效果展示

https://img1.sycdn.imooc.com//5d31717900013ccb00110019.jpg

PPT动图

数据哪里来的?

爬虫抓的!

不懂爬虫怎么办?

看这里《进击的虫师》爬取豆瓣电影海报(Top250)

自动化制作PPT 的 一二三

先制作PPT模板

https://img1.sycdn.imooc.com//5d31717e0001015705880216.jpg

插入占位符


https://img1.sycdn.imooc.com//5d31718c00013b5803820620.jpg

占位符种类

制作模板的过程, 就是插入占位符的过程, 可以根据自己的需求插入各种占位符, 比如,豆瓣电影Top250的需求是, 插入图片和文本内容, 那就从占位符中选择, 内容, 图片, 插入模板就好, 然后再对模板中的内容样式和图片位置进行调整, 就能得到符合需求的模板了

https://img1.sycdn.imooc.com//5d3171c30001d27c06000341.jpg

模板长这样


准备数据:

我直接把原来写过的,python爬取豆瓣电影的脚本, 运行了一遍, 图片和文本数据就都齐了《进击的虫师》爬取豆瓣电影海报(Top250)

https://img1.sycdn.imooc.com//5d3171c700016fbf06010605.jpg

准备资源


Python编程(将数据按照模板填空, 导出到最终的ppt中)

源码如下(注释详尽):

from pptx import Presentationfrom pptx.util import Inches# 获取豆瓣电影信息def getInfo():
    movies_info = []    with open('./douban_movie_top250.txt') as f:        for line in f.readlines():
            line_list = line.split("\'")
            one_movie_info = {}
            one_movie_info['index'] = line_list[1]
            one_movie_info['title'] = line_list[3]
            one_movie_info['score'] = line_list[5]            try:
                one_movie_info['desc'] = line_list[7]            except:
                one_movie_info['desc'] = ''

            one_movie_info['image_path'] = "./Top250_movie_images/"+ str(line_list[1]) + '_' + line_list[3] + ".jpg"

            movies_info.append(one_movie_info)    return movies_info# 创建pptdef createPpt(movies_info):
    prs = Presentation('model.pptx')    for movie_info in movies_info:        # 获取模板个数
        templateStyleNum = len(prs.slide_layouts)        # 按照第一个模板创建 一张幻灯片
        oneSlide = prs.slides.add_slide(prs.slide_layouts[0])        # 获取模板可填充的所有位置
        body_shapes = oneSlide.shapes.placeholders        for index, body_shape in enumerate(body_shapes):            if index == 0:
                body_shape.text = movie_info['index']+movie_info['title']            elif index == 1:
                img_path = movie_info['image_path']
                body_shape.insert_picture(img_path)            elif index == 2:
                body_shape.text = movie_info['desc']            elif index == 3:
                body_shape.text = movie_info['score']    # 对ppt的修改  
    prs.save('豆瓣Top250推荐.pptx')def main():
    # 获取豆瓣电影信息
    movies_info = getInfo()
    createPpt(movies_info)if __name__ == '__main__':
    main()

Python生成图表(豆瓣电影Top20的评分为例)

https://img1.sycdn.imooc.com//5d3171ce0001e11b05860449.jpg

Top20报表

# encoding: utf-8from pptx import Presentationfrom pptx.chart.data import ChartDatafrom pptx.enum.chart import XL_CHART_TYPEfrom pptx.util import Inches# 创建幻灯片prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])# 定义图表数据chart_data = ChartData()
chart_data.categories = ['肖申克的救赎', '霸王别姬', '这个杀手不太冷', '阿甘正传', '美丽人生', '千与千寻', '泰坦尼克号', '辛德勒的名单', '盗梦空间', '机器人总动员', '海上钢琴师', '三傻大闹宝莱坞', '忠犬八公的故事', '放牛班的春天', '大话西游之大圣娶亲', '楚门的世界', '教父', '龙猫', '熔炉', '乱世佳人']
chart_data.add_series('豆瓣电影', (9.6, 9.5, 9.4, 9.4, 9.5, 9.2, 9.2, 9.4, 9.3, 9.3, 9.2, 9.2, 9.2, 9.2, 9.2, 9.1, 9.2, 9.1, 9.2, 9.2))# 将图表添加到幻灯片x, y, cx, cy = Inches(0), Inches(0), Inches(10), Inches(8)
slide.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data)
prs.save('豆瓣 Top20 评分图.pptx')

关于数据图形化: Python有很多优秀的图形库, 比如matplotlab, 以及Google推出的在线编程工具colabratory, 都可以方便的实现数据可视化, 掌握了Python图形库的使用, 基本可以和PPT图表说拜拜了...


https://img1.sycdn.imooc.com//5d3171d3000125dc05930427.jpg

colabratory



作者:木子昭
链接:https://www.jianshu.com/p/5b294515b480

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消