Я знаю, что этот вопрос старый, но я только что закончил проект, который использует python для обновления PowerPoint ежедневно. Каждое утро запускается скрипт python, и он извлекает данные за этот день из базы данных, помещает данные в powerpoint, а затем запускает средство просмотра PowerPoint для воспроизведения PowerPoint.
Чтобы ответить на ваш вопрос, вам нужно будет просмотреть все фигуры на странице и проверить, находится ли строка, которую вы ищете, в shape.text. Вы можете проверить, имеет ли текст текст, проверяя, является ли shape.has_text_frame истинным. Это позволяет избежать ошибок.
Здесь есть вещи, в которые попадают трики. Если бы вы просто заменили строку в shape.text текстом, который хотите вставить, вы, вероятно, потеряете форматирование. shape.text на самом деле является конкатенацией всего текста в форме. Этот текст можно разделить на множество «прогонов», и все эти прогоны могут иметь другое форматирование, которое будет потеряно, если вы напишете над shape.text или замените часть строки.
На слайде у вас есть фигуры, а фигуры могут иметь text_frame, а в text_frames есть параграфы (по крайней мере один, всегда, даже когда он пуст), и абзацы могут выполняться. Любой уровень может иметь форматирование, и вы не можете определить, сколько пробегов ваша строка разделяется.
В моем случае я убедился, что любая строка, которая должна была быть заменена, была в его собственной форме. Вы все еще должны сверлить весь путь до запуска и установить там текст, чтобы все форматирование было сохранено. Кроме того, строка, которую вы сопоставляете в shape.text, может быть фактически разбросана по нескольким прогонам, поэтому при настройке текста в первом запуске я также устанавливаю текст во всех остальных прогонах этого абзаца пустым.
случайный код Snippit:
from pptx import Presentation
testString = '{{thingToReplace}}'
replaceString = 'this will be inserted'
ppt = Presentation('somepptxfile.pptx')
def replaceText(shape, string,replaceString):
#this is the hard part
#you know the string is in there, but it may be across many runs
for slide in ppt.slides:
for shape in slide.shapes:
if shape.has_text_frame:
if(shape.text.find(testString)!=-1:
replaceText(shape,testString,replaceString)
К сожалению, если есть какая-либо опечатка. Im at work .....
Итак, нет достойного/простого способа имитировать поиск и замену funtion в презентации Power Point с Python? Даже не с другими модулями? – Morganis
@Morganis - вы можете использовать IronPython для управления презентацией PowerPoint под Windows с использованием API Microsoft (аналогично VBA). Это будет работать только на стороне клиента (в отличие от сервера) и может быть немного медленным (это на моей машине, но я запускаю Windows в виртуальной машине). Но это было бы намного быстрее, чем делать это вручную. Я не знаю никаких других библиотек Python, которые предоставляют подробное редактирование файла PowerPoint, хотя прошло некоторое время с тех пор, как я осмотрелся. Я автор python-pptx btw. – scanny