在R中绑定或合并多个PowerPoint文档

13

我一直在使用office套件来创建幻灯片,但此时,我想将它们全部合并成一个幻灯片集,但无法找出方法。请问是否有任何软件包可以帮助将多个PowerPoint幻灯片集合并成一个?


1
我有同样的问题!我很想知道答案。 - clairekelley
2
这个有用吗:https://www.online-tech-tips.com/free-software-downloads/merge-powerpoint-ppt-files/ - mkareshky
@J.sabree,您是否必须使用officer包,还是可以使用Rstudio的Rmarkdown并使用自定义PPTX模板呈现到PPTX中? - Mike
2个回答

2
我相信目前在 R 中没有任何函数或包可以实现这一点,所以我会提供几个可能的解决方案。
1:我相信您可以使用 read_pptx() 来读取 deck1 和 deck2 文件。然后,循环遍历 deck2 的幻灯片索引,并使用这些值将其添加到 deck1 中。我认为 officer 中有一个名为 pptx_summary() 的函数,它可以将 pptx R 对象转换为 tibble,但我不确定是否可以将 tibble 转换回 pptx R 对象。
2:您可以将 pptx 文件转换为 pdf 文件,并使用 pdftools 将它们合并。

0

通过R自动创建PowerPoint幻灯片时(例如使用R markdown的PowerPoint导出),可能需要将它们与预先制作的固定幻灯片(例如带有详细视觉解释)合并。由于目前似乎没有单行解决方案,因此这里提供了一个不完整的答案来回答一个三年前的问题。

查看OfficeR的源代码可以发现,该软件包使用后台数据结构和临时文件夹,其中包含压缩在XLSX文件中的XML文件。

因此,复制幻灯片需要两个步骤:更新结构和复制XML文件和其他资源。以下是基于OfficeR类的合并两个PowerPoint文件的非常粗略的草稿。

merge_pptx = function(a, b, filename) {
    # go through the slides of b
    for (index in 1:length(source$slide$get_metadata())) {
    
        # We need a new filename in the target's slide directory
        new_slidename <- target$slide$get_new_slidename()
        xml_file <- file.path(target$package_dir, "ppt/slides", new_slidename)
    
        # Copy XML from source to new filename
        orgFilename = source$slide$get_metadata()[index, "filename"]
        newFilepath = paste(target$package_dir, newFilename, sep="/")
        file.copy(orgFilename, xml_file)
    
        # Not sure yet, what exactly this does
        slide_info <- target$slideLayouts$get_metadata()[1,]  # Use first best layout at the moment
        layout_obj <- target$slideLayouts$collection_get(slide_info$filename)
        layout_obj$write_template(xml_file)
    
        # update presentation elements
        target$presentation$add_slide(target = file.path("slides", new_slidename))
        target$content_type$add_slide(partname = file.path("/ppt/slides", new_slidename))
     
        # Add the slide to the collection   
        target$slide$add_slide(xml_file, target$slideLayouts$get_xfrm_data())
    
        target$cursor <- target$slide$length()
    }

    print(target, target=filename)
}

source = read_pptx("One.pptx")
target = read_pptx("Two.pptx")
merge_pptx(source, target, "Combined.pptx")

请注意,这只是一个草稿。它还没有考虑幻灯片的不同布局,更不用说不同的母版了。嵌入的文件(图片)还没有被复制。
此函数的大部分灵感来自于dir_slide类中的add_slide()函数,请参见https://github.com/davidgohel/officer/blob/master/R/ppt_class_dir_collection.R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接