用Python自动化办公操作PPT,掌握这些技巧没压力!
大数据时代,实现数字化办公越发显得尤为重要,它可以帮助公司优化管理,提升效率,强化决策的一致性。
那我们首先来看看PPT办公自动化能干什么?
了解了PPT办公自动化在工作中的重要作用,接下来我们详细讲讲如何用Python实现PPT的办公自动化。
官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/powerpoint.shape.copy
1.2 win32com复制ppt模板
有时候我们需要对ppt的模板进行复制,然后再添加相应内容,由于python-pptx对复制模板也没有很好的支持。所以我们用win32com对模板页进行复制,然后再用python-pptx增加ppt内容。
参考官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/powerpoint.slide.copy
先准备好一张模板: 2.2 win32 ppt测试.pptx
输入代码:
import win32com
from win32com.client import Dispatch
import os
ppt = Dispatch('PowerPoint.Application')
# 或者使用下面的方法,使用启动独立的进程:
# ppt = DispatchEx('PowerPoint.Application')
# 如果不声明以下属性,运行的时候会显示的打开word
ppt.Visible = 1 # 后台运行
ppt.DisplayAlerts = 0 # 不显示,不警告
# 创建新的PowerPoint文档
# pptSel = ppt.Presentations.Add()
# 打开一个已有的PowerPoint文档
pptSel = ppt.Presentations.Open(os.getcwd() + "\\" + "2.2 win32 ppt测试.pptx")
# 复制模板页
pptSel.Slides(1).Copy()
#设置需要复制的模板页数
pageNums = 10
# 粘贴模板页
for i in range(pageNums):
pptSel.Slides.Paste()
# pptSel.Save() # 保存
pptSel.SaveAs(os.getcwd() + "\\" + "win32_copy模板.pptx") # 另存为
pptSel.Close() # 关闭 PowerPoint 文档
ppt.Quit() # 关闭 office
2.1 pip安装python-pptx
2.2 python-pptx 复制页面
使用python-pptx进行复制没有找到合适的方法,有以下两种解决办法:
2.3 python-pptx 删除页面
python-pptx 多页待删除模板.pptx:
示例代码:
from pptx import Presentation
# 删除某一页ppt
def del_slide(prs,index):
slides = list(prs.slides._sldIdLst)
prs.slides._sldIdLst.remove(slides[index])
# 3.3 python-pptx 删除页面
def fun3_3():
# 打开ppt
ppt = Presentation('python-pptx 多页待删除模板.pptx')
# 获取所有页
slides = ppt.slides
number_pages = len(slides)
print("删除前ppt一共",number_pages,"页面")
# 设置需要删除的页面数量
delPageNums = 3
# 进行删除操作(每次都删除第一张ppt)
for index in range(delPageNums):
del_slide(ppt,0)
# 再次获取所有页
slides = ppt.slides
number_pages = len(slides)
print("删除后ppt一共",number_pages,"页面")
ppt.save('python-pptx 多页已删除模板.pptx')
print('生成完毕')
if __name__ == '__main__':
fun3_3()
from pptx import Presentation
# 新建ppt
ppt = Presentation()
# 新建页面
slide = ppt.slides.add_slide(ppt.slide_layouts[0])
# 保存ppt
ppt.save('新建ppt.pptx')
3.1 python-pptx 添加文字并设置样式
3.1.1添加单行文字与多行文字
示例代码:
from pptx import Presentation
from pptx.util import Pt,Cm
# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')
# 设置添加到当前ppt哪一页
n_page = 0
singleLineContent = "我是单行内容"
multiLineContent = \
"""我是多行内容1
我是多行内容2
我是多行内容3
"""
# 获取需要添加文字的页面对象
slide = ppt.slides[n_page]
# 添加单行内容
# 设置添加文字框的位置以及大小
left, top, width, height = Cm(16.9), Cm(1), Cm(12), Cm(1.2)
# 添加文字段落
new_paragraph1 = slide.shapes.add_textbox(left=left, top=top, width=width, height=height).text_frame
# 设置段落内容
new_paragraph1.paragraphs[0].text = singleLineContent
# 设置文字大小
new_paragraph1.paragraphs[0].font.size = Pt(15)
# 添加多行
# 设置添加文字框的位置以及大小
left, top, width, height = Cm(16.9), Cm(3), Cm(12), Cm(3.6)
# 添加文字段落
new_paragraph2 = slide.shapes.add_textbox(left=left, top=top, width=width, height=height).text_frame
# 设置段落内容
new_paragraph2.paragraphs[0].text = multiLineContent
# 设置文字大小
new_paragraph2.paragraphs[0].font.size = Pt(15)
# 保存ppt
ppt.save('4.1 添加文字.pptx')
3.1.2 设置文字框样式与文字样式
示例代码:
from pptx import Presentation
from pptx.util import Pt,Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import MSO_VERTICAL_ANCHOR, PP_PARAGRAPH_ALIGNMENT
from pptx.enum.text import PP_ALIGN
# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')
# 获取需要添加文字的页面对象
slide = ppt.slides[0]
# 设置添加文字框的位置以及大小
left, top, width, height = Cm(16.9), Cm(1), Cm(12), Cm(1.2)
# 添加文字框 slide.shapes.add_textbox(距离左边,距离顶端,宽度,高度)
textBox = slide.shapes.add_textbox(left=left, top=top, width=width, height=height)
# 调整文本框背景颜色
textBoxFill = textBox.fill
textBoxFill.solid() # 纯色填充
textBoxFill.fore_color.rgb = RGBColor(187, 255, 255)
# 文本框边框样式调整
line = textBox.line
line.color.rgb = RGBColor(0, 255, 0)
line.width = Cm(0.1)
# 获取文本框对象
tf = textBox.text_frame
# 文本框样式调整
tf.margin_bottom = Cm(0.1) # 下边距
tf.margin_left = 0 # 左边距
tf.vertical_anchor = MSO_VERTICAL_ANCHOR.BOTTOM # 对齐文本方式:底端对齐
tf.word_wrap = True # 文本框的文字自动对齐
# 设置内容
tf.paragraphs[0].text = '这是一段文本框里的文字'
# 字体样式调整
tf.paragraphs[0].alignment = PP_ALIGN.CENTER # 对齐方式
tf.paragraphs[0].font.name = '微软雅黑' # 字体名称
tf.paragraphs[0].font.bold = True # 是否加粗
tf.paragraphs[0].font.italic = True # 是否斜体
tf.paragraphs[0].font.color.rgb = RGBColor(255, 0, 0) # 字体颜色
tf.paragraphs[0].font.size = Pt(20) # 字体大小
# 保存ppt
ppt.save('4.1.2 设置文字框与字体样式.pptx')
3.2 python-pptx 添加表格并设置样式
示例代码:
from pptx import Presentation
from pptx.util import Pt,Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import MSO_ANCHOR
from pptx.enum.text import PP_ALIGN
# 设置需要添加到哪一页
n_page = 0
# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')
# 获取slide对象
slide = ppt.slides[n_page]
# 设置表格位置和大小
left, top, width, height = Cm(6), Cm(12), Cm(13.6), Cm(5)
# 表格行列数,和大小
shape = slide.shapes.add_table(6, 7, left, top, width, height)
# 获取table对象
table = shape.table
# 设置列宽
table.columns[0].width = Cm(3)
table.columns[1].width = Cm(2.3)
table.columns[2].width = Cm(2.3)
table.columns[3].width = Cm(1.3)
table.columns[4].width = Cm(1.3)
table.columns[5].width = Cm(1.3)
table.columns[6].width = Cm(2.1)
# 设置行高
table.rows[0].height = Cm(1)
# 合并首行
table.cell(0, 0).merge(table.cell(0, 6))
# 填写标题
table.cell(1, 0).text = "时间"
table.cell(1, 1).text = "阶段"
table.cell(1, 2).text = "执行用例"
table.cell(1, 3).text = "新增问题"
table.cell(1, 4).text = "问题总数"
table.cell(1, 5).text = "遗留问题"
table.cell(1, 6).text = "遗留致命/" \
"严重问题"
# 填写变量内容
table.cell(0, 0).text = "产品1"
content_arr = [["4/30-5/14", "DVT1", "20", "12", "22", "25", "5"],
["5/15-5/21", "DVT1", "25", "32", "42", "30", "8"],
["5/22-6/28", "DVT1", "1", "27", "37", "56", "12"],
["5/22-6/28", "DVT1", "1", "27", "37", "56", "12"]]
# 修改表格样式
for rows in range(6):
for cols in range(7):
# Write column titles
if rows == 0:
# 设置文字大小
table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(15)
# 设置字体
table.cell(rows, cols).text_frame.paragraphs[0].font.name = '微软雅黑'
# 设置文字颜色
table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)
# 设置文字左右对齐
table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
# 设置文字上下对齐
table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
# 设置背景为填充
table.cell(rows, cols).fill.solid()
# 设置背景颜色
table.cell(rows, cols).fill.fore_color.rgb = RGBColor(34, 134, 165)
elif rows == 1:
table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(10)
table.cell(rows, cols).text_frame.paragraphs[0].font.name = '微软雅黑' # 字体名称
table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 0)
table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
table.cell(rows, cols).fill.solid()
table.cell(rows, cols).fill.fore_color.rgb = RGBColor(204, 217, 225)
else:
table.cell(rows, cols).text = content_arr[rows - 2][cols]
table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(10)
table.cell(rows, cols).text_frame.paragraphs[0].font.name = '微软雅黑' # 字体名称
table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 0)
table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
table.cell(rows, cols).fill.solid()
table.cell(rows, cols).fill.fore_color.rgb = RGBColor(204, 217, 225)
ppt.save('4.2 python-pptx 添加表格并设置样式.pptx')
3.3 python-pptx 添加图表并设置样式
示例代码:
from pptx import Presentation
from pptx.util import Pt,Cm
from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
# 设置需要添加到哪一页
n_page = 0
# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')
# 获取slide对象
slide = ppt.slides[n_page]
# 初始化图表
chart_data = ChartData()
# 填充需要添加的内容
content_arr = [["4/30-5/14", "DVT1", "20", "12", "22", "25", "5"],
["5/15-5/21", "DVT1", "25", "32", "42", "30", "8"],
["5/22-6/28", "DVT1", "1", "27", "37", "56", "12"],
["5/22-6/28", "DVT1", "1", "27", "37", "56", "12"]]
# 填充图表
chart_data.categories = [content_arr[0][0], content_arr[1][0], content_arr[2][0], content_arr[3][0]]
chart_data.add_series("问题总数", (content_arr[0][4], content_arr[1][4], content_arr[2][4], content_arr[3][4]))
chart_data.add_series("遗留问题总数", (content_arr[0][5], content_arr[1][5], content_arr[2][5], content_arr[3][5]))
chart_data.add_series("遗留致命严重\n问题总数", (content_arr[0][6], content_arr[1][6], content_arr[2][6], content_arr[3][6]))
# 设置位置
left, top, width, height = Cm(6), Cm(10), Cm(16.1), Cm(7.5)
# 添加图表
chart = slide.shapes.add_chart(
XL_CHART_TYPE.LINE, left, top, width, height, chart_data
).chart
chart.has_legend = True
chart.legend.include_in_layout = False
# chart.series[0].smooth = True # 是否平滑
# chart.series[1].smooth = True
# chart.series[2].smooth = True
chart.font.size = Pt(10) # 文字大小
ppt.save('4.3 python-pptx 添加图表并设置样式.pptx')
print('折线图添加完成')
好了,以上是比较详细的操作方法,希望能给大家有点帮助
关注小编或收藏,学习起来更方便!