Я пытаюсь изменить и заполнить шаблон PPTX с помощью скрипта Python.
для этого я использую две функции: Generate_template и fill_in_doc . < Br /> Когда я использую функции отдельно в 2 разных прогонах, они работают. Однако, когда я звоню им один за другим, я получаю эту ошибку:
return self._open_to_write (zinfo, force_zip64 = force_zip64)
/usr/lib/python3 .10/zipfile.py: 1528: userwarning: duplicate name: 'ppt/slides/slide8.xml'
Вот мои функции:
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
Python Выпуск: userwarnning: дубликат имени ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Userwarnning: FigureCanvasagg не интерактивно и, таким образом, не может быть показан
Anonymous » » в форуме Python - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Userwarnning: FigureCanvasagg не интерактивно и, таким образом, не может быть показан
Anonymous » » в форуме Python - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Userwarnning: FigureCanvasagg не интерактивно и, таким образом, не может быть показан
Anonymous » » в форуме Python - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-