Можно ли управлять элементами управления ComboBox или ListBox с помощью python-pptx - PullRequest
0 голосов
/ 08 июля 2019

Я хотел бы распространить файл pptx со скриптом Python, который добавляет настраиваемые графики с использованием python-pptx. Чтобы настроить графики, я хотел бы иметь слайд, который действует как форма, позволяющая пользователям устанавливать некоторые значения. Я могу добавить комбинированные списки и списки на слайд, используя элементы управления, показанные на вкладке Разработчик, но я не уверен, что python-pptx может получить доступ к значениям, установленным этими элементами управления. Я бы предпочел не использовать макросы VBA, потому что тогда презентация должна быть файлом pptm, а не файлом pptx, и у многих пользователей есть организации, которые не допускают файлы макросов из Microsoft Office. Возможно ли для python-pptx доступ к значениям, заданным пользователем, когда элементы управления combobox и listbox находятся на слайде, и можно ли задать список параметров, отображаемых в этих элементах управления?

1 Ответ

0 голосов
/ 08 июля 2019

В python-pptx поддержки API нет, пока что нет.

Однако, если элемент хранится в файле .pptx, к нему можно получить доступ в Python, если вы хотите над этим поработать. Насколько сложно зависит от того, где в пакете .pptx он хранится.

Для начала я бы порекомендовал проверить XML слайда, который содержит один из элементов управления, которые вы планируете использовать. Пакет opc-diag (Python) подходит для этой работы.

Получение XML-кода происходит быстрее всего, когда вы начинаете как можно меньше, например, с проверки slide1.xml презентации с одним слайдом, содержащим одну фигуру, скажем, прямоугольник с текстом «foobar» (что делает это легко найти в XML с помощью поиска).

После того, как вы выяснили, как выглядят элементы, к которым вы стремитесь, вы можете использовать XPath для их поиска и lxml вызовы, чтобы прочитать их значения. Итак, примерно так:

from pptx import Presentation

prs = Presentation("my-pptx.pptx")
sld = prs.slides[0]._element  # ---XML element of slide---
aliases = sld.xpath(".//p:stdPr/p:alias")
print(aliases[0]["val"])

Вам может потребоваться узнать больше о lxml, чем вы действительно хотели бы знать, чтобы заставить его работать. Например, с пространствами имен несколько больно иметь дело.

...