У меня есть презентация в формате pptx, которую мне нужно часто обновлять с помощью графиков, которые я генерирую с помощью R-скрипта. Я хотел бы автоматизировать замену графиков без необходимости копировать и вставлять между экранами целую кучу раз. Я играю с пакетом ReporteRs, и это кажется многообещающим, но я не могу понять, как просто заменить графики, которые уже есть в презентации. Вся документация по ReporteR показывает, что вам нужно добавить новый слайд, а затем поместить свои графики на этот новый слайд. Есть ли способ сказать: «удалить граф на слайде 7 и заменить его на график XXX?» Является ли ReporteR лучшим пакетом для этого?R ReporteRs: Редактирование существующих слайдов
ответ
Try:
library(DescTools)
# create a new PP instance
pp <- GetNewPP()
# create your plt and insert into pp
barplot(1:5)
pic <- PpPlot(width=10, height=5, pp=pp)
# add a new slide
PpAddSlide()
# new plot on new slide, just to make it difficult to go back
barplot(10:5)
pic2 <- PpPlot(width=10, height=5, pp=pp)
# get a collection of slides
slides <- pp[["ActivePresentation"]][["Slides"]]
# maybe convenient to go back to slide 1
slides$Item(1)$Select()
# get a handle to slide 1
slide1 <- slides$Item(1)
# get handle to any pic on the slide
pic1 <- slide1[["Shapes"]]$Item(1)
# delete it
pic1$Delete()
# create and insert a new one
barplot(rep(1,5), col="red")
PpPlot(width=10, height=5, pp=pp)
С ReporteRs
(formerl R2DOCX), я полагаю, вы можете использовать закладки при создании слов файлов для поиска и вставки графики, и могут быть эквивалент в PowerPoint.
Вы также должны ознакомиться с пакетом DescTools
. Это довольно легко учиться и вполне способно, на самом деле проще, чем ReporteRs
.
Вы можете создать шаблон и сделать все свои заголовки и написать в шаблоне. Затем вы можете размещать закладки с помощью Insert/Bookmarks, в которые вы хотите добавить R-графики. Вы должны сохранить свои сюжеты в объект R, названный так же, как названа закладка. Затем, каждый раз, когда вы повторно запускаете свой код, DescTools начинается с шаблона и вставляет графики в нужные места.
Этот фрагмент запускает процесс, создавая «отчет» из шаблона.
library(DescTools)
library(RDCOMClient)
report <- GetNewWrd(template="C:/Users/[your path to the template.docx")
С помощью этого процесса, вы можете перемещаться вокруг текстовых плюс сюжетно-закладки все, что вы хотите, и сделать обработку текста в Слове в шаблоне, то есть R вставить участки. У меня есть код, который помещает каждый график в список, и в конце R пробегает список, и оба создают и вставляют каждый из графиков.
Теперь, можете ли вы сделать что-то подобное в PowerPoint, я не знаю.
Согласно документации ReporteRs
, это должно быть относительно простым. Как говорит @lawyeR, это касается «закладок». Вы можете найти примеры из пакета автора here.
В качестве примера, почти дословно, из этой ссылки код будет похож на это:
mydoc = pptx(template = 'examples/pp_simple_example.pptx')
myplot = qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
# This is the important line, note the 'bookmark' pertaining to slide
mydoc = addSlide(mydoc, slide.layout = 'Title and Content', bookmark=2)
# change title
mydoc = addTitle(mydoc, 'my new graph')
# add the plot
mydoc = addPlot(mydoc, print, x = myplot)
# save changes to new file
writeDoc(mydoc, 'examples/pp_replacement.pptx')
Как упомянуто ниже, сопровождающий исправили ошибку. Теперь вы можете заменить слайды. Как вы заметили, это заменит весь слайд. Несмотря на небольшое неудобство в начале, вы можете легко настроить сценарий для добавления на слайд одного и того же названия, текста и т. Д., И вы можете легко скопировать слайд много раз. При этом вы также можете быстро изменить любой текст, если что-то изменится (пища для размышлений).
Этот код заменяет мой второй слайд с пустым слайдом, которым myplot на нем. Я делаю что-то неправильно? Я думал, что он будет вставлять myplot в то, что у меня уже было на слайде 2, или заменить изображение, которое находится на слайде 2. – user3390169
@cdeterman ваш код в порядке, это была проблема в ReporteR. Исправление находится на github. И нет, дополнительная строка не нужна –
@ user3390169 метод заменит весь слайд на новый слайд. –
Спасибо Andri, это доставит мне большую часть пути. Есть ли место, где можно найти все атрибуты [[«Shapes»]]? Мне повезло, и я использовал pic1 $ Height(), чтобы найти высоту изображения перед удалением, но я не могу понять, как найти позицию xy. – user3390169
Ну, в PP нет макрорекордера, поэтому вам нужно исследовать объектную модель vba пешком. Нажмите на меню/макросы, затем создайте новый макрос и нажмите F2. Это вызовет объектную модель. Но для установки позиции вы можете использовать аргументы x и y в PpPlot(). См. PpPlot для других дополнительных аргументов. –