2015-02-02 4 views
6

У меня есть презентация в формате pptx, которую мне нужно часто обновлять с помощью графиков, которые я генерирую с помощью R-скрипта. Я хотел бы автоматизировать замену графиков без необходимости копировать и вставлять между экранами целую кучу раз. Я играю с пакетом ReporteRs, и это кажется многообещающим, но я не могу понять, как просто заменить графики, которые уже есть в презентации. Вся документация по ReporteR показывает, что вам нужно добавить новый слайд, а затем поместить свои графики на этот новый слайд. Есть ли способ сказать: «удалить граф на слайде 7 и заменить его на график XXX?» Является ли ReporteR лучшим пакетом для этого?R ReporteRs: Редактирование существующих слайдов

ответ

1

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) 
+1

Спасибо Andri, это доставит мне большую часть пути. Есть ли место, где можно найти все атрибуты [[«Shapes»]]? Мне повезло, и я использовал pic1 $ Height(), чтобы найти высоту изображения перед удалением, но я не могу понять, как найти позицию xy. – user3390169

+0

Ну, в PP нет макрорекордера, поэтому вам нужно исследовать объектную модель vba пешком. Нажмите на меню/макросы, затем создайте новый макрос и нажмите F2. Это вызовет объектную модель. Но для установки позиции вы можете использовать аргументы x и y в PpPlot(). См. PpPlot для других дополнительных аргументов. –

1

С 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, я не знаю.

2

Согласно документации 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') 

Как упомянуто ниже, сопровождающий исправили ошибку. Теперь вы можете заменить слайды. Как вы заметили, это заменит весь слайд. Несмотря на небольшое неудобство в начале, вы можете легко настроить сценарий для добавления на слайд одного и того же названия, текста и т. Д., И вы можете легко скопировать слайд много раз. При этом вы также можете быстро изменить любой текст, если что-то изменится (пища для размышлений).

+0

Этот код заменяет мой второй слайд с пустым слайдом, которым myplot на нем. Я делаю что-то неправильно? Я думал, что он будет вставлять myplot в то, что у меня уже было на слайде 2, или заменить изображение, которое находится на слайде 2. – user3390169

+0

@cdeterman ваш код в порядке, это была проблема в ReporteR. Исправление находится на github. И нет, дополнительная строка не нужна –

+0

@ user3390169 метод заменит весь слайд на новый слайд. –