I'm trying to set a .pptx presentation to loop until Escape is pressed. Usually this is done in Powerpoint in the Set up Slide Show Dialog, but I'm doing it with the python pptx module. I have tested with opc-diag and determined that the only difference when that option is selected is that there is a tag like this in the /ppt/presProps.xml part of the powerpoint file: <p:showPr loop="1" showNarration="1">
Now, in my python code, I have tried something to this extent with no success:
def xpath(el, query):
nsmap = {'p': 'http://schemas.openxmlformats.org/presentationml/2006/main'}
return etree.ElementBase.xpath(el, query, namespaces=nsmap)
presentation = Presentation()
p = "http://schemas.openxmlformats.org/presentationml/2006/main"
ele = etree.Element(etree.QName(p, "showPr"), attrib={'loop': '1'})
# this does not work... Expecting element, getting presentation.
xpath(presentation, './/p:presentationPr')[0].getparent().insert(-1, ele)
I need to append the element for showPr to the root element of the presentation, but the xpath function is expecting an element, where I have just the presentation being passed. I do not know how to access the root node to append the showPr loop bit.
Any help would be appreciated.
I've tried the above code, which I was expecting to produce my desired result of setting <p:showPr loop="1" showNarration="1">
inside the /ppt/presProps.xml file but it is expecting an element, and I'm passing the presentation object. I don't know how to proceed.
You're on the right track, but there are a few more steps:
PresentationProperties
"part", which is an XML document distinct from thePresentation
part. (The files inside the .pptx zip archive are called parts in the OPC lingo.)Then you should be able to run your XPath expressions against that
presentationPr
element.This should work to print the XML out to have a look at it, which will confirm the steps so far have worked: