0

再见,

我正在使用R 上的官员包进行自定义 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 参数是如何工作的吗?

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

或者:

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

谢谢你的帮助,

再见

4

1 回答 1

0

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

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

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

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

此数据框包含有关幻灯片布局结构的信息。特别是幻灯片名称(名称列)、组件类型(类型列)和段落标签(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"。

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

于 2019-02-05T13:20:49.960 回答