Merge PPTX python [已关闭]

wnavrhmk  于 2023-05-08  发布在  Python
关注(0)|答案(2)|浏览(135)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

3天前关闭。
Improve this question
我试图一次合并多个PowerPoint演示文稿,但没有成功,也没有保持格式。我发现的唯一方法是aspose cloud,虽然它工作得很好,但速度很慢。我希望用pptx-Python来做,并保持格式。谢谢
我试着用我在网上找到的标准合并代码,但它丢失了格式

yyhrrdl8

yyhrrdl81#

你可以试试...

from pptx import Presentation
import os
import glob
import copy

imgDict = {}

pres = glob.glob("*.pptx")
prs1 = Presentation(pres[0])
for presentation in pres[1:]:
    pres = Presentation(presentation)
    for slide in pres.slides:
        sl = prs1.slides.add_slide(prs1.slide_layouts[6])
        for shape in slide.shapes:
            if 'Picture' in shape.name:
                with open(shape.name+'.jpg', 'wb') as f:
                    f.write(shape.image.blob)
                imgDict[shape.name+'.jpg'] = [shape.left, shape.top, shape.width, shape.height]
            else:
                el = shape.element
                newel = copy.deepcopy(el)
                sl.shapes._spTree.insert_element_before(newel, 'p:extLst')

        for k, v in imgDict.items():
            try:
                sl.shapes.add_picture(k, v[0], v[1], v[2], v[3])
            except:
                pass

        for k, v in imgDict.items():
            try:
                os.remove(k)
            except:
                pass

    prs1.save("MERGED.pptx")

但格式上没有保证。如果上面的例子对你没有用处,幻灯片是非常好的

syqv5f0l

syqv5f0l2#

这段代码定义了一个函数merge_pptx_files,它将多个PowerPoint演示文稿合并到一个文件中。

  • 文件(str的列表):要合并的PowerPoint演示文稿的文件路径列表。
  • outputfile(str):将保存合并的PowerPoint演示文稿的文件路径。
  • read_only(bool):确定合并文件是否为只读的标志。
  • has_title(bool):确定合并文件是否具有标题的标志。
  • window(bool):确定PowerPoint应用程序窗口是否可见的标志。

该函数使用win32库创建PowerPoint应用程序示例,并打开要合并的文件列表中的第一个文件。它创建一个变量nr_temp_slide来存储主演示文稿中幻灯片的总数。
然后,该函数遍历列表中的其余文件,打开每个文件,并遍历每个文件中的幻灯片。对于每个文件中的每个幻灯片,该函数递增nr_slide变量和nr_temp_slide变量,然后使用Copy()和Paste()方法将幻灯片复制到主演示文稿。
最后,该函数关闭打开的文件,保存合并的文件,关闭PowerPoint应用程序示例,并返回合并文件的文件路径。

import win32com.client as win32

file1 = '*/file1.pptx'
file2 = '*/file2.pptx'
file3 = '*/file3.pptx'
file4 = '*/file4.pptx'
files = [file1, file2, file3, file4]
mergefile = '*/mergedfile.pptx'

def merge_pptx_files(files=None, outputfile='file.pptx', read_only=True, has_title=False, window=False):
    ppt_app = win32.Dispatch("PowerPoint.Application")
    pptx_main  = ppt_app.Presentations.Open(files[0],read_only,has_title,window)
    nr_temp_slide = len(pptx_main.Slides) 

    for file in files[1:]:
        print(f' Processing file: {file}')
        pptx_file  = ppt_app.Presentations.Open(file,read_only,has_title,window)
        for nr_slide in range(len(pptx_file.Slides)):
            nr_slide += 1 
            nr_temp_slide += 1
            pptx_file.Slides(nr_slide).Copy()
            pptx_main.Slides.Paste(Index=nr_temp_slide)
        pptx_file.Close()
    print('\n Saving final file...')
    pptx_main.SaveAs(outputfile)
    pptx_main.Close()       

    #kills ppt_instance
    ppt_app.Quit()
    del ppt_app
    print(' Done!')
    return outputfile

merged_file = merge_pptx_files(files,mergefile)

相关问题