独立的树叶 · 坚持社会主义市场经济的改革方向--理论-人民网· 4 月前 · |
老实的拐杖 · 《开端》中的时间循环,正在被日本动漫淘汰|动 ...· 4 月前 · |
痴情的眼镜 · 中国国际招标网-机电产品国际招标行政监督和公 ...· 1 年前 · |
朝气蓬勃的咖啡豆 · Corona8安装步骤-Corona8详细安 ...· 1 年前 · |
坚强的脸盆 · Casio计算器编程实用教程(1显示图片) ...· 1 年前 · |
如何复制幻灯片?
我创建了一个模板幻灯片,我需要复制它并分别编辑每个副本的形状。
或者如何将我的模板幻灯片添加到presentation.slide_layouts?
这是我在GitHub上找到的,它对我很有效。我确实为我的项目做了一些改变。您将需要导入六个并复制。我正在使用pptx-6.10
def duplicate_slide(pres, index):
template = pres.slides[index]
blank_slide_layout = pres.slide_layouts[12]
except:
blank_slide_layout = pres.slide_layouts[len(pres.slide_layouts)]
copied_slide = pres.slides.add_slide(blank_slide_layout)
for shp in template.shapes:
el = shp.element
newel = copy.deepcopy(el)
copied_slide.shapes._spTree.insert_element_before(newel, 'p:extLst')
for _, value in six.iteritems(template.part.rels):
# Make sure we don't copy a notesSlide relation as that won't exist
if "notesSlide" not in value.reltype:
copied_slide.part.rels.add_relationship(
value.reltype,
value._target,
value.rId
return copied_slide
然后,您可以通过传入演示文稿和模板的幻灯片索引来创建副本:
copied_slide = duplicate_slide(pres, 4)
我仍然在编辑复制的幻灯片中的形状,一旦我在我的项目中进行得更深入,我就可以更新
因为我还发现了@d_bergeron共享的代码的另一个用例,所以我只想在这里分享它。在我的例子中,我想将另一个演示文稿中的幻灯片复制到我用python-pptx生成的幻灯片中:
作为参数,我传入使用python-pptx (prs = Presenation())创建的Presentation()对象。
from pptx import Presentation
import copy
def copy_slide_from_external_prs(prs):
# copy from external presentation all objects into the existing presentation
external_pres = Presentation("PATH/TO/PRES/TO/IMPORT/from.pptx")
# specify the slide you want to copy the contents from
ext_slide = external_pres.slides[0]
# Define the layout you want to use from your generated pptx
SLD_LAYOUT = 5
slide_layout = prs.slide_layouts[SLD_LAYOUT]
# create now slide, to copy contents to
curr_slide = prs.slides.add_slide(slide_layout)
# now copy contents from external slide, but do not copy slide properties
# e.g. slide layouts, etc., because these would produce errors, as diplicate
# entries might be generated
for shp in ext_slide.shapes:
el = shp.element
newel = copy.deepcopy(el)
curr_slide.shapes._spTree.insert_element_before(newel, 'p:extLst')
return prs
我主要在这里发布它,因为我正在寻找一种方法来将外部幻灯片复制到我的演示文稿中,并最终出现在这个帖子中。
很抱歉延迟了,我被转移到另一个项目了。我能够使用多个模板幻灯片并复制它们来完成我的ppt项目。在构建演示文稿的末尾,我删除了模板。要获取形状,您需要遍历slide.shapes并找到要查找的形状的名称。返回后,您可以根据需要编辑形状。我已经添加了用于填充shape.text_frame的add_text函数的一个版本。
def find_shape_by_name(shapes, name):
for shape in shapes:
if shape.name == name:
return shape
return None
def add_text(shape, text, alignment=None):
if alignment:
shape.vertical_anchor = alignment
tf = shape.text_frame
tf.clear()
run = tf.paragraphs[0].add_run()
run.text = text if text else ''
找到形状"slide_title“。
slide_title = find_shape_by_name(slide.shapes,'slide_title')
若要向形状添加文本,请执行以下操作。
add_text(slide_title,'TEST SLIDE')
如果您需要任何其他帮助,请告诉我。
我想介绍一下复制幻灯片的变通方法。我使用一个模板ppt并填充它。在填充幻灯片之前,我知道模板的哪些幻灯片需要复制以及多久复制一次。然后我要做的是复制幻灯片,并将新的ppt与复制的幻灯片一起保存。保存后,我可以打开带有复制的幻灯片的ppt,并使用pptx填充幻灯片。
import win32com.client
ppt_instance = win32com.client.Dispatch('PowerPoint.Application')
#open the powerpoint presentation headless in background
read_only = True
has_title = False
window = False
prs = ppt_instance.Presentations.open('path/ppt.pptx',read_only,has_title,window)
nr_slide = 1
insert_index = 1
prs.Slides(nr_slide).Copy()
prs.Slides.Paste(Index=insert_index)
prs.SaveAs('path/new_ppt.pptx')
prs.Close()
#kills ppt_instance
ppt_instance.Quit()
del ppt_instance
在这种情况下,将复制演示文稿的第一张幻灯片,并将其插入到同一演示文稿的第一张幻灯片之后。
希望这对你们中的一些人有帮助!
这是另一种方法,可以将每张幻灯片复制到整个演示文稿的单个PPTX幻灯片上,然后您可以使用LibreOffice将每个幻灯片转换为图像:
def get_slide_count(prs):
""" Get the number of slides in PPTX presentation """
slidecount = 0
for slide in prs.slides:
slidecount += 1
return slidecount
def delete_slide(prs, slide):
""" Delete a slide out of a powerpoint presentation"""
id_dict = { slide.id: [i, slide.rId] for i,slide in enumerate(prs.slides._sldIdLst) }
slide_id = slide.slide_id
prs.part.drop_rel(id_dict[slide_id][1])
del prs.slides._sldIdLst[id_dict[slide_id][0]]
def get_single_slide_pres(prs, slidetokeep):
for idx, slide in enumerate(prs.slides):
if idx < slidetokeep:
delete_slide(prs, slide)
elif (idx > slidetokeep):
delete_slide(prs, slide)
prs.save(str(slidetokeep + 1) + ".pptx")
pptxfilepath = "test.pptx"
独立的树叶 · 坚持社会主义市场经济的改革方向--理论-人民网 4 月前 |
痴情的眼镜 · 中国国际招标网-机电产品国际招标行政监督和公共服务平台 1 年前 |
坚强的脸盆 · Casio计算器编程实用教程(1显示图片) - 知乎 1 年前 |