Невозможно перевести текст на другой язык внутри ячейки или таблицы в pptx

1

Невозможно перевести текст в немецкий внутри ячейки или в какую-нибудь таблицу в pptx. Однако простой текст в слайдах переводится.

Мой вход pptx выглядит следующим образом: Изображение 174551

Получение вывода, как показано ниже: Hello World и т.д. Не переводится.

Изображение 174551

код, который я использую, как показано ниже:

prs = Presentation('old.pptx')
for slide in prs.slides: 
    for shape in slide.shapes: 
        if not shape.has_text_frame: 
            continue
        text_frame = shape.text_frame
        text_frame.text=translator.translate(text_frame.text,dest='de').text



prs.save('new.pptx')

Можно ли настроить этот код так, чтобы перевод можно было сделать для всех внутри pptx? Я могу понять, что он ищет текстовую рамку, но любой шанс настроить ее для работы? Если я удалю ниже из приведенного выше кода, вы получите ошибку...

   if not shape.has_text_frame: 
            continue

AttributeError: объект 'Picture' не имеет атрибута 'text_frame'

Я прошел через python-pptx docs и обнаружил, что есть функции для char, table, pictures и т.д., Но не могу понять, как передать это для перевода, чтобы текст внутри него можно было перевести. Ссылка Ссылка - https://python- pptx.readthedocs.io/en/latest/

Теги:
python-pptx

1 ответ

1

Вам нужно будет перебирать ячейки любых таблиц отдельно, что-то вроде этого:

def iter_cells(table):
    """Generate each cell in *table*, left-to-right, top-to-bottom."""
    for row in table.rows:
        for cell in row.cells:
            yield cell

def translate_table(table):
    for cell in iter_cells(table):
        text_frame = cell.text_frame
        text_frame.text = translator.translate(text_frame.text, dest='de').text

for shape in slide.shapes:
    if shape.has_table:
        translate_table(shape.table)
    if not shape.has_text_frame:
        continue
    ...

Обратите внимание, что таблица сама по себе не является формой. Скорее он содержится в форме GraphicFrame.

В вопросе изображений не все формы могут содержать текст. Форма изображения является одной из тех, поэтому она должна быть пропущена, прежде чем пытаться получить доступ к объекту TextFrame него нет (и не может).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню