В конце я понял.Правда в том, что проблема не тривиальна, так как случается, что значения индекса относятся к разным частям 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 "Заголовок".
Эти функции полезны, когда выиметь несколько ящиков для одного и того же «типа».