Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to replace text in Powerpoint?

This is the code I am using to replace text in powerpoint. First I am extracting text from powerpoint and then storing the translated and original sentences as dictionary.

prs = Presentation('/content/drive/MyDrive/presentation1.pptx')


# To get shapes in your slides
slides = 
shapes = []
for slide in slides:
    for shape in slide.shapes:
        shapes.append(shape)

def replace_text(self, replacements: dict, shapes: List):
    """Takes dict of {match: replacement, ... } and replaces all matches.
    Currently not implemented for charts or graphics.
    """
    for shape in shapes:
        for match, replacement in replacements.items():
            if shape.has_text_frame:
                if (shape.text.find(match)) != -1:
                    text_frame = shape.text_frame
                    for paragraph in text_frame.paragraphs:
                        for run in paragraph.runs:
                            cur_text = run.text
                            new_text = cur_text.replace(str(match), str(replacement))
                            run.text = new_text
            if shape.has_table:
                for row in shape.table.rows:
                    for cell in row.cells:
                        if match in cell.text:
                            new_text = cell.text.replace(match, replacement)
                            cell.text = new_text

replace_text(translation, shapes) 

I get a error

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-97-181cdd92ff8c> in <module>()
      9         shapes.append(shape)
     10 
---> 11 def replace_text(self, replacements: dict, shapes: List):
     12     """Takes dict of {match: replacement, ... } and replaces all matches.
     13     Currently not implemented for charts or graphics.

NameError: name 'List' is not defined

translation is a dictionary

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

translation = {' Architecture': 'आर्किटेक्चर',
 ' Conclusion': 'निष्कर्ष',
 ' Motivation / Entity Extraction': 'प्रेरणा / इकाई निष्कर्षण',
 ' Recurrent Deep Neural Networks': 'आवर्तक गहरे तंत्रिका नेटवर्क',
 ' Results': 'परिणाम',
 ' Word Embeddings': 'शब्द एम्बेडिंग',
 'Agenda': 'कार्यसूची',
 'Goals': 'लक्ष्य'}

May I know why am I getting this error. What chnages should be done to resolve it. Also can I save the replaced text using prs.save('output.pptx')

New Error



TypeError                                 Traceback (most recent call last)
<ipython-input-104-957db45f970e> in <module>()
     32                             cell.text = new_text
     33 
---> 34 replace_text(translation, shapes)
     35 
     36 prs.save('output.pptx')

TypeError: replace_text() missing 1 required positional argument: 'shapes'

>Solution :

The error you are getting ‘NameError: name ‘List’ is not defined’ occurs because ‘List’ isn’t a valid type within python Typing. Since Python 3.9, you’ll want to use ‘list[type]’

For instance:

def replace_text(self, replacements: dict, shapes: list[str]):

Alternatively, you can use python’s typing. However, this is deprecated in newer versions.

from typing import List 
def replace_text(self, replacements: dict, shapes: List[str]):
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading