layui中table监听单元格_最全总结 | 聊聊 Python 办公自动化之 PPT(中)

点击上方 “AirPython”,选择 “加为星标”

第一时间关注 Python 技术干货!

a9a731ece4bc77ed06100f854c62de85.png

1. 前言

上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作

最全总结 | 聊聊 Python 办公自动化之 PPT(上)

作为 PPT 系列篇第 2 篇文章,将覆盖下列内容

  • 表格 Table

  • 图片 Image,包含静态图片、Gif 动态图片

  • 视频 Video

2. 表格 Table

实例化一个幻灯片 Slide 对象后,就可以使用下面的方法插入一个表格

方法:slide.shapes.add_table(rows,cols,left,top,width,height)
参数分别是:
  • rows  表格行数 

  • cols  表格列数

  • left  左边距

  • top  上边距

  • width  表格宽度

  • height  表格高度

返回值类型是:pptx.shapes.graphfrm.GraphicFrame

它的 table 属性即为一个表格对象:pptx.table.Table

def insert_table(slide, rows, cols, left, top, width, height, unit=Cm):"""
    幻灯片中插入一个表格
    :param unit: 默认单位为厘米
    :param slide: 幻灯片对象
    :param rows: 行数
    :param cols: 列数
    :param left: 左边距
    :param top: 上边距
    :param width: 宽度
    :param height: 高度
    :return:
    """# 插入一个表格
    table = slide.shapes.add_table(rows, cols, unit(left), unit(top), unit(width), unit(height))# 返回表格对象return table.table# 1.创建一个幻灯片 Slide 对象(空白样式)
slide = add_slide(self.presentation, 6)# 2.插入一个表格# 参数分别为:幻灯片对象、行数、列数、左边距、上边距、宽度、高度
table = insert_table(slide, 3, 3, 3, 5, 13.6, 5)

2-1  如何重新设置表的行高、列宽?

为了生成表格的美观性,对表的行高、列宽进行调整很有必要

其中,表格对象的 columns、rows 属性分别用于获取所有的列对象、行对象

def set_table_column_width(table, column_index, width, unit=Cm):
    """
    设置表格某一列的宽度
    :param table:
    :param column_index:
    :param width:
    :param unit: 单位默认为厘米
    :return:
    """
    table.columns[column_index].width = unit(width)


def set_table_row_height(table, row_index, height, unit=Cm):
    """
    设置表格某一行的高度
    :param table:
    :param row_index:
    :param height:
    :param unit:
    :return:
    """
    table.rows[row_index].height = unit(height)

# 3.重新设置表的宽度、高度
# 3.1 分别设置第1-3行列宽
set_table_column_width(table, 0, 5)
set_table_column_width(table, 1, 5)
set_table_column_width(table, 2, 5)

# 3.2 分别设置行高
set_table_row_height(table, 0, 1.5)
set_table_row_height(table, 1, 1.2)
set_table_row_height(table, 2, 1.2)

2-2  设置单元格数据

首先,通过行索引、列索引获取对应的单元格对象

# 获取某一个单元格对象
# 注意:索引从0开始
# 比如:获取第一行、第一列的单元格对象
cell = table.cell(0,0)

接着,指定单元格对象的 text 属性值为指定的内容即可

# 设置单元格的值
cell.text = "单元格显示的内容"

这样,我们定义一组数据,就可以按照插入到表格中了

# 4.设置表格数据
datas = [
    ["学员", "姓名", "年龄"],
    ["", "星安果", 23],
    ["", "AirPython", 18]]

# 遍历设置数据到单元格中
for row_index in range(len(table.rows)):
    for column_index in range(len(table.columns)):
        # 获取单元格对象
        cell_temp = table.cell(row_index, column_index)

        # 设置数据
        cell_temp.text = str(datas[row_index][column_index])

2-3  单元格样式调整

调整单元格的样式包含下面 3 步
  • 获取单元格文本对象

  • 拿到文本对象的段落对象

  • 通过段落,指定段落对齐方式及文字的样式

以设置第一行单元格文字加粗、居中显示为例

# 5、设置第一行表头单元格文字加粗居中显示
for column_index in range(len(table.columns)):
    # 1、单元格对象
    cell = table.cell(0, column_index)
    # 2、文本控件的段落
    paragraph = cell.text_frame.paragraphs[0]
    # 3、设置段落样式
    set_parg_font_style(paragraph, font_name='微软雅黑', font_size=23, font_color=[255, 0, 0],
                        font_bold=True)

需要指出的是,单元格中的文本控件除了使用默认的段落,也可以添加新的段落,设置不同的内容及样式

2-4  单元格背景颜色

上一篇文章设置文本框 TextBox 背景的方法同样适用于单元格

def set_widget_bg(widget, bg_rgb_color=None):
    """
    设置【文本框textbox/单元格/形状】的背景颜色
    :param widget:文本框textbox、单元格、形状
    :param bg_rgb_color:背景颜色值
    :return:
    """
    if bg_rgb_color and len(bg_rgb_color) == 3:
        # 1、将形状填充类型设置为纯色
        widget.fill.solid()
        # 2、设置文本框的背景颜色
        widget.fill.fore_color.rgb = RGBColor(bg_rgb_color[0], bg_rgb_color[1], bg_rgb_color[2])

# 设置单元格背景颜色
set_widget_bg(cell, [204, 217, 225])

2-5  合并单元格

语法如下:

# 合并单元格
开始单元格.merge(结束单元格)

以合并单元格并居中显示为例

from pptx.enum.text import MSO_VERTICAL_ANCHOR, MSO_ANCHOR

def set_cell_center(cell):
    """
    设置单元格文字居中显示
    :param cell:
    :return:
    """
    paragraph = cell.text_frame.paragraphs[0]
    paragraph.alignment = PP_ALIGN.CENTER
    cell.vertical_anchor = MSO_ANCHOR.MIDDLE

# 6、单元格合并
# 合并单元格并居中显示
table.cell(1, 0).merge(table.cell(2, 0))
table.cell(1,0).text="合并"
set_cell_center(table.cell(1,0))

经过上面一系列操作,最后在幻灯片中生成的表格如下:

b010801bd342f41e39a12c2ddd9c3e5a.png

3. 图片 Image

无论是静态图片,或者是 GIF 动态图片,插入到幻灯片的方式一样

方法:slide.shapes.add_picture(imge_file,left,top,width,height)
参数分别为:
  • image_file  图片路径

  • left  左边距

  • top  上边距

  • width  图片显示宽度

  • height  图片显示高度

def insert_image(slide, pic_path, left, top, width=None, height=None, unit=Inches):
    """
    幻灯片中加入图片(包含静态图片和动态图片)
    :param unit: 单位默认为Inches
    :param pic_path: 文件路径
    :param slide: 幻灯片对象
    :param left: 左边距
    :param top:  上边距
    :param width: 宽度
    :param height: 高度
    :return:
    """
    # 注意:如果width、height都为None时,以图片原始大小展示
    width = unit(width) if width else None
    height = unit(height) if height else None

    pic_obj = slide.shapes.add_picture(image_file=pic_path,
                                       left=unit(left),
                                       top=unit(top),
                                       width=width,
                                       height=height)
    return pic_obj

def image_manage(self):
    """
    图片管理
    :return:
    """
    # 插入一张静态图片
    slide = add_slide(self.presentation, 6)

    # 图片路径
    image_path = './1.jpeg'

    # 插入本地图片
    insert_image(slide, image_path, 6, 6, unit=Cm)

需要指出的是,当 width、height 不显式指定,默认值为 None,则按照图片真实大小去显示,当图片很大时,可能会出现展示不全的情况

9f485fe1940a7919f9191dc91335a2ed.png

因此,在实际项目中,我们只需要先获取图片的宽高比,然后等比例设置到宽度和高度参数中即可

from PIL import Image

def get_image_aspect_ratio(image_path):
    """
    获取图片的宽高比
    :param image_path:
    :return:
    """
    img = Image.open(image_path)

    # 图片类型:GIF
    image_format = img.format

    # 图片宽、高
    width, height = img.size

    # 图片宽高比
    aspect_ratio = width / height

    return aspect_ratio

# 获取宽、高比
aspect_ratio = get_image_aspect_ratio(image_path)

# 等比例插入图片到PPT中
insert_image(slide, image_path, 6, 6, 6, 6 / aspect_ratio, unit=Cm)

4. 视频 Video

往 PPT 文档中插入视频的方法如下

slide.shapes.add_movie(video_path,left,top,width,height,poster_frame_image)

参数分别为:

  • video_path  视频路径

  • left  左边距

  • top  上边距

  • width  视频显示宽度

  • height  视频显示高度

  • poster_frame_image  视频封面图路径

4-1  获取视频宽高比

为了保证视频在 PPT 中显示完全,我们需要先获取视频的宽、高比

推荐安装 moviepy 依赖库,获取视频的基本信息

# 安装依赖
pip3 install moviepy

接着,构造一个 VideoFileClip 对象,从中获取视频的宽度、高度

from moviepy.editor import VideoFileClip

def get_video_aspect_ratio_and_thumbnail_path(video_path, frame_index):
    """
    获取图片的宽、高比
    :param video_path: 视频路径
    :param frame_index 帧索引
    :return:
    """
    clip = VideoFileClip(video_path)

    # 视频的宽度、高度
    width, height = clip.size

    # 获取宽、高比
    aspect_ratio = width / height

4-2  获取视频帧

视频封面图,我们可以从视频中筛选中一帧,保存到本地

def get_video_frame(clip, frame_index):
    """
    获取视频的某一帧图片
    :param clip:
    :param frame_index:
    :return:
    """
    # 帧数目
    frame_count = math.floor(clip.fps * clip.duration)
    # print('视频帧数目:', frame_count)

    # 保证参数输入有效
    if frame_index 0 or frame_index > frame_count:
        frame_index = 1

    # 视频所有的帧
    frames = clip.iter_frames()
    # clip.get_frame()

    # 定义输出图片路径
    thumbnail_path = "{}/temp/{}.jpg".format(os.path.abspath(os.path.dirname(__file__)), random_str(10))

    # 遍历,找到对应的帧,保存到本地
    for index, frame in enumerate(frames):
        if frame_index == index:
            # 保持帧图片到本地
            im = Image.fromarray(frame)
            im.save(thumbnail_path)
            break

    return thumbnail_path

4-3  插入视频

最后,将插入视频的操作进行一次封装,传入视频封面图、左边距、上边距、显示宽度,即可以完成视频的插入动作

def insert_video(self):
    """
    插入视频
    :return:
    """
    slide = add_slide(self.presentation, 6)

    video_path = './1.mp4'

    # 获取图片宽高比,并保存一个临时的缩略图到本地
    aspect_ratio, thumbnail_path = get_video_aspect_ratio_and_thumbnail_path(video_path, 120)

    # 将视频插入到PPT中
    insert_video(slide, video_path, thumbnail_path, 3, 3, 4, 4 / aspect_ratio)

# 将视频插入到PPT中
insert_video(slide, video_path, thumbnail_path, 3, 3, 4, 4 / aspect_ratio)

5. 最后

本篇文章讲到了 PPT 文档中关于表格、图片、视频这 3 种常见内容的操作

我已经将全部源码上传到后台,关注公众号,后台回复「 ppt 」即可获得全部源码

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

留言送书本周赠书:《Python数据分析全流程实操指南内容简介:本书主要围绕整个数据分析方法论的常规流程,介绍了 Python 常用的工具包,包括科学计算库 Numpy、数据分析库 Pandas、数据挖掘库 Scikit-Learn,以及数据可视化库 Matplotlib 和 Seaborn 的基本知识,并从数据分析挖掘的实际业务应用出发,讲解了互联网、金融及零售等行业的真实案例,比如客户分群、产品精准营销、房价预测、特征降维等,深入浅出、循序渐进地介绍了 Python 数据分析的全过程PS:中奖名单将于下周一在交流群公布推荐阅读最全总结 | 聊聊 Python 办公自动化之 Excel(上)最全总结 | 聊聊 Python 办公自动化之 Excel(中)最全总结 | 聊聊 Python 办公自动化之 Excel(下)最全总结 | 聊聊 Python 办公自动化之 Word(上)最全总结 | 聊聊 Python 办公自动化之 Word(中)最全总结 | 聊聊 Python 办公自动化之 Word(下)最全总结 | 聊聊 Python 办公自动化之 PPT(上)74b89b06b5feef4d0248c2b5e3ff6be1.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

东北考生到南方学计算机,为啥东北考生都想去南方,而南方学生很少考东北,看看他们怎么说...

原标题:为啥东北考生都想去南方,而南方学生很少考东北,看看他们怎么说文/晓宁说教育高考对于众多考生来说,是人生中最重要的一场考试,如果能在高考中发挥出好成绩,就可以顺利的考上一所自己理想的大学。按照…

用excel制作双层饼图_双层饼图,让你的工作更出彩

在Excel中饼图是很常见的图表类型,做起来也很简单,相信大家都会做。但双层饼图你会做吗?如下图所示,根据左侧的数据源,做出右侧的双层饼图。这么漂亮的双层饼图是怎么制做出来的呢?今天我就来给大家分享一下…

Comet OJ - 2019 六一欢乐赛

传送门 #A&#xff1a; 思路&#xff1a;等差数列求和,看成俩次12… n,多加的n减去&#xff0c;所以 ans n*(n1) - n。 AC代码&#xff1a; 1 #include<iostream>2 #include<algorithm>3 #include<string>4 using namespace std;5 int main()6 {7 int n…

三个子系统_「正点原子Linux连载」第五十八章Linux INPUT子系统实验(一)

1)实验平台&#xff1a;正点原子Linux开发板2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南》关注官方微信号公众号&#xff0c;获取更多资料&#xff1a;正点原子第五十八章Linux INPUT子系统实按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux内核为此专门…

【翻译】eXpressAppFramework QuickStart 业务模型设计(十)——在代码中实现数据验证...

这一讲&#xff0c;你将学到如何给业务对象和他们的属性设置规则。最终用户在执行赋值操作后将验证这些规则。你可以实现必填规则使得Position.Title属性不能为空。此规则将在Position对象保存的时候被验证。你还能够看到打破规则的界面提示。在此之前&#xff0c;我建议你去读…

注册机patch起什么作用_电机滑环起什么作用?

电机滑环起什么作用?发电机滑环就是我们传统的集电环&#xff0c;用于电机的换向器上作为导出导入电流的滑动接触体&#xff0c;它的导电、导热以及润滑性能良好&#xff0c;并具有一定的机械强度和换向性火花的本能。几乎所有的电机都使用碳刷&#xff0c;它是电机的重要组成…

《Java并发编程的艺术》之synchronized的底层实现原理

在学习锁优化时&#xff0c;对象头(Mark Word) 是必不可缺的一环&#xff0c;因为synchronized 用的锁是存在对象头里的。32位的虚拟机上对象头占64位&#xff08;8字节&#xff09;&#xff0c;64位的虚拟机上对象头占128位(16字节&#xff09;[^objectHead]&#xff1b;而不同…

文字投影_店铺门口投影灯,引领店铺新潮流

在社会的进步下&#xff0c;现在人们物质生活越来越好&#xff0c;在原来消费的基础上也更加注重消费时店铺的装修、氛围。装修精致、环境优雅的店铺不仅更加容易吸引顾客&#xff0c;并且更加容易让顾客打卡发圈&#xff0c;无形中也帮自己做了一波宣传。上次我们出去游玩的时…

实验5

一、 1 #ifndef MACHINEPETS_H2 #define MACHINEPETS_H3 #include<iostream>4 #include<string>5 using namespace std;6 class MachinePets7 {8 public:9 MachinePets(const string s) :nickname(s) {} 10 virtual string talk()0; 11 string getnick…

计算机网络ieee,博士生程珂论文连续两年被计算机网络顶级会议IEEE INFOCOM录用...

近日&#xff0c;第39届IEEE国际计算机通信会议(IEEE International Conference on Computer Communications, IEEE INFOCOM 2020)录用结果揭晓&#xff0c;陕西省网络与系统安全重点实验室沈玉龙教授课题组博士生程珂的论文《A Lightweight Auction Framework for Spectrum Al…

去除标题_资深运营导师-云中教你轻松写标题

一、标题作用解读标题对于产品的意义买家购买逻辑想到一款产品&#xff0c;并知道他的名称去网上搜索&#xff0c;看到图片等信息类比价格评价等内容&#xff0c;下单收到货和自己根据标题照片评判商品核心要点&#xff1a;买家是根据产品名字作为购买切入点&#xff1b;照片和…

报名学校计算机考试在哪里报,全国计算机等级考试报名流程

全国计算机等级考试报名流程全国计算机等级考试采用全国统一命题&#xff0c;统一考试的形式&#xff0c;各科目均为上机操作考试。1&#xff0e;上网填报基本信息考生可任意选择地点并在规定时间内上网填报、修改及查询本人信息。填报过程分为登录、查看提示信息、输入并提交报…

卸载一直在创建还原点_如何创建系统还原点以及如何恢复?

如何创建系统还原点1、在搜索框中输入“创建还原点”并打开。2、在“系统保护”选项卡中点击“创建”。3、为此次还原点添加备注描述&#xff0c;此处命名为测试&#xff0c;点击创建即可。恢复系统至上一个还原点1、在刚才的“系统保护”界面中点击“系统还原”。2、在弹出的系…

学生党的Surface Pro 5乞丐版使用体验

因为已经装了台式机&#xff0c;大一开学时买的厚重且续航差的华硕游戏本&#xff08;i5GTX950M8G)对我这个考研党已经显得不合适了。恰巧有一同学笔记本坏了&#xff0c;我便将游戏本低价出了&#xff0c;然后用两三倍的价格&#xff0c;入手了surface pro5 (new surface)的最…

2018计算机河北省高考试题,2018年河北高考物理压轴试题【含答案】

2018年河北高考物理压轴试题【含答案】18&#xff0e;如图4所示&#xff0c;由粗细均匀的电阻丝制成的边长为L的正方形金属框向右匀速运动&#xff0c;穿过方向垂直金属框平面向里的有界匀强磁场&#xff0c;磁场宽度d2L。从ab边刚进入磁场到金属框全部穿出磁场的过程中&#x…

富士通01018z平板电脑评测_档案扫描好帮手,富士通ix1500无线双面高速扫描仪评测...

扫描仪是办公中常用的一种设备&#xff0c;尤其是建立了较为完备的档案管理制度的企业和组织&#xff0c;经常需要扫描和存档大量的文稿和图像&#xff0c;下文就介绍一台获得日本Good Design设计奖的无线高速扫描仪——富士通ScanSnap iX1500。打开包装可以看到ScanSnap iX150…

工厂模式 + 反射 ?= 灵活多变的数据库

工厂模式 反射 ? 灵活多变的数据库么 由于现实项目中我们难保会客户会更换系统的数据库&#xff0c;这样我们需要把若干数据库各种情况基本上都想到。多种数据库&#xff0c;引出抽象&#xff0c;我们就能在众多数据库的上层抽出一个Factory&#xff0c;由Factory去引导具体…

中使用swiper不能自动切换_液晶拼接墙显示系统中矩阵切换器使用的注意事项

近年来在液晶拼接墙显示系统中矩阵切换器的使用已变得越来越普遍、这主要是因为各矩阵切换器品牌商根据众多用户的实际需求对矩阵进行了同能扩展与完善。这也使得矩阵切换器除了使用在大屏拼接显示系统外还适用于多媒体会议系统、调度指挥系统、数字化城市建设、安防等工程。而…

计算机的双一流学校,分数不够上双一流大学计算机专业,上这些大学也不错,实力非常强...

有句话说“穷人就学计算机”&#xff0c;为什么会有这种说法呢&#xff1f;学计算机是穷人翻身最快的途径&#xff1f;的确&#xff0c;因为计算机是一项可以不靠人脉、不需要过高的口才的技术性工作。对于穷人来说&#xff0c;无背景无社会资源&#xff0c;只能靠自己&#xf…

Jupyter Notebook 使用小记

简介 Jupyter Notebook 是一款几乎综合所有编程语言&#xff0c;能够把软件代码、计算输出、解释文档、多媒体资源整合在一起的多功能科学计算平台。具有如下优点&#xff1a; 整合所有资源交互性编程体验零成本重现结果安装 本地安装 # python3 python3 -m pip install --upgr…