在r中绑定或合并多个PowerPoint

tf7tbtn2  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(120)

我一直在使用军官包来创建各自的PowerPoint幻灯片组,但在这一刻,我想合并/绑定他们都作为一个幻灯片组,并无法弄清楚。有人能指导我,如果有任何软件包,有助于合并多个PowerPoint幻灯片组成一个。

x0fgdtte

x0fgdtte1#

我相信目前在R中还没有这样的函数或包,所以我将向您推荐几个可能的解决方案。
1:我相信你可以使用read_pptx()来读取deck1和deck2文件。然后,循环deck2的幻灯片索引,并使用这些值将add_slide()转换为deck1。我认为在officer中有一个名为pptx_summary()的函数,它将pptx R对象转换为tibble,但我不确定你是否可以将tibble转换回pptx R对象。
2:你可以将pptx文件转换成pdf文件,然后使用pdftools来连接它们。

xn1cxnb4

xn1cxnb42#

当通过R自动创建PowerPoint幻灯片时(例如通过使用R markdown的PowerPoint导出),将它们与预先制作好的固定幻灯片(例如用精致的视觉效果进行解释)合并可能是必要的。由于到目前为止似乎没有单行解决方案,这里是一个3年前的问题的不完整答案。
查看一下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

相关问题