如何在官官包的ph_with_text函数中使用索引参数

时间:2019-02-01 09:13:49

标签: r powerpoint reporters officer

Ciao

我正在使用R上的军官包来制作自定义pptx演示文稿。 事实是,我正在移植代码形式 Reporters

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

ppt <- read_pptx()

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

ppt <- read_pptx("Blank_officer.pptx")

这就是标准幻灯片布局enter image description here

的问题是,我dont't知道如何在这一点上填写的字段。这就是我想要达到的目标:

enter image description here

我尝试使用以下代码:

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" )

,我得到以下结果: enter image description here

这似乎不错,但事实是,我选择的首页由“先试用后失效”的方法,即通过论证随机选择的价值,看看会发生什么。

  

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

     

对于给定的幻灯片布局,有没有显示给我的命令,这些索引是我可以在文本框中使用的索引?

或者:

  

我想知道是否存在类似于“ Tab”的功能,即可以让我在 Reporters 包中的 addParagraph 函数之类的文本框中导航的功能。

感谢您的帮助,

Ciao

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

想法是使用此数据框构建动态地图,对于每张幻灯片,type和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“标题”。

当您具有多个用于同一“类型”的框时,这些功能很有用。