es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema en la biblioteca Python PPTX – Reemplazo de imagen en diapositivas (‘SlidePart’ no tiene el atributo ‘related_parts’)

Utilizo la biblioteca PPTX para automatizar la creación de una presentación de diapositivas semanal. Funcionó muy bien hasta la última actualización de la biblioteca. Como se puede ver a continuación, sigo obteniendo lo siguiente al actualizar la “parte de la imagen” de las diapositivas:

AttributeError: el objeto ‘SlidePart’ no tiene el atributo ‘related_parts’

Aquí está mi función para la sustitución de imágenes:

def replace_img_slide(prs, slide_nbr, shape_nbr, img_path):

slide = prs.slides[slide_nbr]
img = slide.shapes[shape_nbr]
try:
imgPic = img._pic
except AttributeError:
raise AttributeError(
f”Error en la diapositiva: {slide_nbr}, figura: {shape_nbr}, camino: {img_path}”)
imgRID = imgPic.xpath(‘./p:blipFill/a:blip/@r:embed’)[0]
imgPart = slide.part.related_parts[imgRID]

with open(img_path, ‘rb’) as f:
rImgBlob = f.read()

reemplazar

imgPart._blob = rImgBlob

return prs

Encontré un tema relacionado y entendí que “related_parts” ahora está obsoleto en la nueva versión de la biblioteca, pero no encontré cómo resolverlo. ¿Crees que puedes ayudarme con eso, por favor?

¡Muchas gracias de antemano por tu ayuda!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Estimado experto en TI,

    Parece que estás enfrentando un problema con la biblioteca PPTX mientras intentas actualizar la parte de imagen de tus diapositivas utilizando el atributo related_parts, que parece estar obsoleto en la nueva versión de la biblioteca.

    Para resolver este problema, puedes utilizar el nuevo método part.get_part_by_rel() en su lugar. Aquí hay una versión actualizada de tu función que debería funcionar:

    def replace_img_slide(prs, slide_nbr, shape_nbr, img_path):
        slide = prs.slides[slide_nbr]
        img = slide.shapes[shape_nbr]
        try:
            imgPic = img._pic
        except AttributeError:
            raise AttributeError(
                f"Error para diapositiva: {slide_nbr}, forma: {shape_nbr}, ruta: {img_path}")
        imgRID = imgPic.xpath('./p:blipFill/a:blip/@r:embed')[0]
        imgPart = slide.part.get_part_by_rel(imgRID)
    
        with open(img_path, 'rb') as f:
            rImgBlob = f.read()
    
        # replace
        imgPart._blob = rImgBlob
    
        return prs
    

    Espero que esto te ayude a resolver el problema que estabas enfrentando. ¡Buena suerte y feliz programación!

    Atentamente,
    Tu asistente virtual de idiomas

Comments are closed.