Для этого я использую две функции: generate_template и fill_in_doc.Когда я использую функции отдельно в двух разных запусках, они работают. Однако, когда я вызываю их один за другим, я получаю эту ошибку:
return self._open_to_write(zinfo, Force_zip64=force_zip64)
/usr/lib/python3 .10/zipfile.py
Вот мои функции:
def fill_in_doc(template,data):
for slide in template.slides:
for shape in slide.shapes:
if not shape.has_text_frame:
continue
for paragraph in shape.text_frame.paragraphs :
for run in paragraph.runs:
for cle,valeur in data.items():
if f"" in run.text:
run.text=data[cle]
print('sauvegarde en cours')
template.save(memodir / 'templates/offre_APS_finale.pptx')
< /code>
def generate_template(prs,data):
if data['modele_economique']=='Injection' and data['modele_financement']=='EPC':
delete_slide(prs,'TI')
delete_slide(prs,'TI_INJECTION')
delete_slide(prs,'TI_AUTOCONSOMMATION')
delete_slide(prs,'AUTOCONSOMMATION')
elif data['modele_economique']=='Injection' and data['modele_financement']=='Tier_investissement':
delete_slide(prs,'EPC')
delete_slide(prs,'EPC_INJECTION')
delete_slide(prs,'TI_AUTOCONSOMMATION')
delete_slide(prs,'AUTOCONSOMMATION')
elif data['modele_economique']=='Autoconsommation' and data['modele_financement']=='EPC':
delete_slide(prs,'EPC_INJECTION')
delete_slide(prs,'TI')
delete_slide(prs,'TI_INJECTION')
delete_slide(prs,'TI_AUTOCONSOMMATION')
else :
delete_slide(prs,'TI_INJECTION')
delete_slide(prs,'TI_AUTOCONSOMMATION')
delete_slide(prs,'EPC_INJECTION')
delete_slide(prs,'TI_INJECTION')
delete_slide(prs,'EPC')
< /code>
def delete_slide(prs, text_to_search):
slides_suppr = find_slides_by_text(prs, text_to_search)
xml_slides = prs.slides._sldIdLst
slides = list(xml_slides)
for slide_index in reversed(slides_suppr): problèmes de réindexation
print(f"Suppression de la diapositive : {slide_index}")
slide_element = slides[slide_index]
xml_slides.remove(slide_element) l'élément donné
template.save(memodir / 'static/offre_APS_test.pptx')
< /code>
def find_slides_by_text(prs, text_to_search):
slides = []
for idx, slide in enumerate(prs.slides):
for shape in slide.shapes:
if shape.has_text_frame:
if re.search(r'\b' + re.escape(text_to_search) + r'\b', shape.text, re.IGNORECASE):
slides.append(idx)
break
return slides
< /code>
I tried to put prints everywhere. The error occurs when saving the template after replacing the tags with their value.
Подробнее здесь: https://stackoverflow.com/questions/793 ... icate-name