【问题标题】:How to use index argument in ph_with_text function from officer package如何在官员包的 ph_with_text 函数中使用索引参数
【发布时间】:2019-06-25 20:10:51
【问题描述】:

喏,

我正在使用 R 上的 officer 包进行自定义 pptx 演示。 事实上,我正在移植代码形式 Reporters

我的问题是关于布局的结构。起点是我为了导入主题和格式设置而上传的一个空的pptx;特别是我不使用

ppt <- read_pptx()

创建 pptx,而是从现有文件中导入它:

ppt <- read_pptx("Blank_officer.pptx")

这是标准幻灯片布局

问题是我现在不知道如何填写字段。这就是我想要达到的目标:

我尝试使用以下代码:

ppt <- read_pptx( ROOT_PATH( "template/Blank_officer.pptx" ) )
ppt <-  ppt <- add_slide( ppt, "Internal Slide - 1 Column Text", master = "Blank" )

ppt <- ph_with_text(x = ppt, str = "A Title", type = "title")
ppt <- ph_with_text(ppt, "Bullet text 4", type = "body", index = 4)
ppt <- ph_with_text(ppt, "Bullet text 11", type = "body", index = 11)
ppt <- ph_with_text(ppt, "\nBullet text 11.2", type = "body", index = 11)
ppt <- ph_with_text(ppt, 2, type = "sldNum")

print( ppt, target = "officerTest.pptx" )

我得到以下结果:

看起来不错,但事实是我通过“尝试失败”的方法选择 index 参数,即随机选择值并查看会发生什么。

你能解释一下 index 参数的工作原理吗?

对于给定的幻灯片布局,是否有一个命令可以显示我可以用来在文本框中写入的索引?

替代方案:

我想知道是否存在类似“Tab”的功能,即让我在文本框中导航的功能,例如 Reporters 包中的 addParagraph 功能。 p>

感谢您的帮助,

【问题讨论】:

    标签: r powerpoint reporters officer


    【解决方案1】:

    最后我明白了。事实是,这个问题并不是微不足道的,因为它碰巧索引值引用了 ppt 的不同部分,即它们随时间变化!!!

    这当然意味着我们不能使用整数值,但我们必须使用不同的 1:1 映射。

    为此,我们必须知道幻灯片布局中不同框的名称。即:

    library(officer)
    ppt <- read_pptx()
    layout_properties( ppt ) 
    

    此数据框包含有关幻灯片布局结构的信息。特别是幻灯片名称(name 列)、组件类型(type 列)和段落标签(ph_label 列)。

    我们的想法是使用这个数据框来构建一个动态地图,对于每张幻灯片,类型和 ph_label 都将返回正确的索引。

    为此,我编写了以下函数: pptIndexInfo 函数按布局名称过滤布局数据框,并为对象分配一个渐进式索引(独立于 id)。事实上(我不知道为什么)我们将使用的索引是我们刚刚生成的索引,而不是 id 列值。

    pptIndexInfo <- function( ppt, layout, master ){
      aux = layout_properties(ppt, master = master, layout = layout)
      aux$index = NA
      for(type in unique(aux$type) ){
        aux[ aux$type == type, "index" ] = 1:length(aux[ aux$type == type, "index" ])
      }
      return(aux)
    }
    

    此时我们只需要提取所需 ph_label 的索引。

    Title_index <- function(ppt, layout, master){
      pptInd = pptIndexInfo(ppt, layout, master)
      return( pptInd$index[ which(pptInd$ph_label == "Title") ] )
    }
    

    此函数例如生成过滤后的布局数据框并将分配的索引提取到 ph_label "Title"。

    当您有多个相同“类型”的框时,这些函数很有用。

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 2011-07-29
      • 2017-08-13
      • 1970-01-01
      • 2016-07-03
      • 2021-12-28
      • 2020-10-24
      • 2020-11-27
      • 2020-03-14
      相关资源
      最近更新 更多