Чтобы go от моего комментария, я написал функцию, которая должна работать. К сожалению, пакет RDCOMClient
требует, чтобы вы работали на компьютере windows
devtools::install_github("omegahat/RDCOMClient")
library(RDCOMClient)
ReplaceTextInObject <- function(path, Find, Replace, SlideNum = NULL){
ppApp <- COMCreate("powerpoint.application")
#Requires absolute paths from C drive
path <- normalizePath(c("C://Users",path), winslash = "\\")[2]
ppoint <- ppApp[["Presentations"]]$Open(path, WithWindow = F)
slides <- 1:ppoint$Slides()$Count()
#if SlideNum is NULL - loop through each slide
if(!is.null(SlideNum)&&
all(SlideNum%%1)==0&&
all(SlideNum<=ppoint$Slides()$Count())){
slides <- SlideNum
} else{
stop("m must be either an integer or NULL")
}
for(j in slides){
Slide <- ppoint$Slides(j)
n <- Slide$Shapes()$Range()$Count() # Total number of shape objects on slide
#if there are shapes with text - attempt find and replace
if(n>0){
for(i in 1:n){
if(Slide$Shapes(i)$HasTextFrame()==-1&&
Slide$Shapes(i)$TextFrame()$HasText()==-1){
Slide$Shapes(i)$TextFrame()$TextRange()$Replace(FindWhat = Find,
ReplaceWhat = Replace)
}
}
}
}
ppoint$Save()
ppoint$Close()
rm(Slide, ppoint, ppApp)
}
. Эта функция будет брать номер слайда, а затем просматривать все объекты на слайде. Если объект (или фигура, указанная в VBA, указана в документации) может содержать текст и текст, мы пытаемся найти и заменить функцию в этом объекте фигуры.
Если вы знали точный индекс фигуры, то вам не нужно беспокоиться о al oop, но это сделает большую часть тяжелой работы за вас. Поэтому, если текстовое поле действительно уникально в вашем шаблоне, это должно решить вашу проблему.