R ReporteRs: редактирование существующих слайдов

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


person user3390169    schedule 02.02.2015    source источник


Ответы (3)


Пытаться:

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)
person Andri Signorell    schedule 04.02.2015
comment
Спасибо, Андри, это доводит меня до конца. Есть ли место, где можно найти все атрибуты [[Shapes]]? Мне повезло, и я использовал pic1$Height(), чтобы найти высоту изображения перед его удалением, но я не могу понять, как найти положение xy. - person user3390169; 04.02.2015
comment
Ну, в PP нет макрорекордера, так что придется исследовать объектную модель vba пешком. Нажмите на вид меню/макросы, затем создайте новый макрос и нажмите F2. Это вызовет объектную модель. Но для установки позиции вы можете использовать аргументы x и y в PpPlot(). См. ?PpPlot для других дополнительных аргументов. - person Andri Signorell; 04.02.2015

Согласно документации ReporteRs, это должно быть относительно просто. Как говорит @lawyeR, это касается «закладок». Вы можете найти примеры от автора пакета здесь.

В качестве примера, почти дословно, по этой ссылке код будет похож на этот:

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' )

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

person cdeterman    schedule 02.02.2015
comment
Этот код заменяет мой второй слайд пустым слайдом, на котором есть myplot. Я делаю что-то неправильно? Я думал, что он вставит мой сюжет в то, что у меня уже было на слайде 2, или заменит картинку, которая находится на слайде 2. - person user3390169; 03.02.2015
comment
@cdeterman с вашим кодом все в порядке, это была проблема в ReporteRs. Исправление есть на гитхабе. И нет, лишняя строка не нужна - person David Gohel; 03.02.2015
comment
@ user3390169 метод замены всего слайда новым слайдом. - person David Gohel; 03.02.2015
comment
@user3390169 user3390169, мои правки и дополнительные комментарии решают ваши проблемы? - person cdeterman; 03.02.2015
comment
@cdeterman, к сожалению, нет, я надеялся сохранить текст на уже существующем слайде и просто изменить графики, когда мне нужно. Ваш код, кажется, заменяет весь слайд пустым слайдом, на котором есть мой график. - person user3390169; 03.02.2015
comment
@David Gohel, возможно ли сделать то, о чем я просил, у репортеров? - person user3390169; 03.02.2015
comment
@ user3390169 к сожалению нет - person David Gohel; 03.02.2015
comment
@ user3390169, я понимаю, что вы ищете здесь идеальное удобство, но создать скрипт для воссоздания текста, как я упоминал выше, не должно быть слишком сложно. Возможно, выборочная замена в конечном итоге будет добавлена ​​в ReporteR, если Дэвид захочет. До тех пор это лучшее, что вы можете сделать, если только вы сами не добавляете функциональность в пакет. - person cdeterman; 03.02.2015

С ReporteRs (бывший R2DOCX), я полагаю, вы можете использовать закладки при создании файлов Word для поиска и вставки графиков, и в PowerPoint может быть эквивалент.

Вы также должны посмотреть на пакет DescTools. Его довольно легко освоить, и он вполне способен, на самом деле проще, чем ReporteRs.

Вы можете создать шаблон и делать все свои заголовки и записи в шаблоне. Затем вы можете разместить закладки с помощью Insert/Bookmarks, где вы хотите вставить графики R. Вы должны сохранить свои графики в объекте R с тем же именем, что и закладка. Затем каждый раз, когда вы перезапускаете свой код, DescTools начинает с шаблона и вставляет графики в нужные места.

Этот фрагмент запускает процесс, создавая «отчет» из шаблона.

library(DescTools)
library(RDCOMClient) 
report <- GetNewWrd(template="C:/Users/[your path to the template.docx")

С помощью этого рабочего процесса вы можете перемещать закладки «текст плюс график» сколько угодно и выполнять обработку текста в Word в шаблоне, а затем R вставлять графики. У меня есть код, который помещает каждый график в список, а в конце R проходит по списку и одновременно создает и вставляет каждый из графиков.

Теперь, можно ли сделать что-то подобное в PowerPoint, я не знаю.

person lawyeR    schedule 02.02.2015