Bonjour,
Je suis habituellement assez autonome pour résoudre les problèmes rencontrés au cours du développement de mes outils. Mais là je sèche un peu.
J'ai fait une mise à jour (je réalise que c'est une erreur) de openpyxl et depuis je n'arrive plus à insérer une image dans un fichier excel. Je rencontre l'erreur suivante :
Mon programme lit un premier fichier Excel (TableauSynthese.xlsx), chaque ligne correspond à un objet avec diverses informations le concernant. Pour chaque objet je souhaite créer une fiche résultat dans laquelle j'intègre ces diverses informations ainsi qu'une photo de cet objet et le logo de mon entreprise. Cette fiche résultat est créé à partir d'un fichier excel de référence (Excel_ref.xlsx), dans un onglet j'y ai créé l'aspect visuel de la fiche et un deuxième onglet sert à l'écriture des données récupérées par le script python.Code:IOError: cannot identify image file 'path image'
Passer par un Excel de référence me fait gagner du temps, car cela m'évite de coder entièrement l'aspect de la fiche résultat par contre, l'écriture dans ce fichier explose la mise en page. A priori, openpyxl a du mal à conserver la mise en page lors de l'écriture. Si vous avez des solutions concernant ce problème je suis preneur. Si non, je vais coder la mise en page de la fiche résultat.
Et le problème pour lequel je sollicite votre aide concerne l'insertion d'image dans la fiche résultat. Ca fonctionnait très bien avant mais depuis la MàJ d'openpyxl ça ne fonctionne plus.
Ci-dessous, voici mon script pour générer les fiches résultats :
Il faut juste remplacer les XXXX dans les chemins d'accès par les chemins d'accès que vous utiliserez.
Pièce jointe 332639
Pièce jointe 332641
D'avance merci, je poursuit tout de même mes recherches.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 #!/usr/bin/python # -*- coding: utf-8 -*- import os.path import shutil import os from openpyxl import Workbook from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font from openpyxl.drawing.image import Image from openpyxl.worksheet.pagebreak import Break from openpyxl.worksheet.properties import WorksheetProperties, PageSetupProperties from openpyxl.utils import get_column_letter, column_index_from_string from openpyxl import load_workbook from PIL import Image as PILImage path_xls_ref = "XXXX\Excel_Ref.xlsx" xls_synthese = "XXXX\TableauSynthese.xlsx" rep_resultat = r"XXXX\Fiche" logo = "XXXX\Logo.png" def lecture_tableau_synthese (a) : dico_synthese ={} wb = load_workbook(a,data_only=True) feuille_xls = wb['Synthese'] # +1 car python commence une liste à 0 nbr_colonne = range(len(list(feuille_xls.columns))+1) nbr_ligne = range(len(list(feuille_xls.rows))+1) #pour virer le 0 de la liste tout en gardant la dimension du tableau avec le +1 précédent nbr_colonne = nbr_colonne[1:] #on commence à 3 car il y a la ligne 0 qui n'existe pas, puis une ligne vide puis 2 ligne de titre nbr_ligne = nbr_ligne[4:] for ligne in nbr_ligne : temp = {} num_caisse = str(feuille_xls['A'+str(ligne)].value).strip() num_echant = str(feuille_xls['B'+str(ligne)].value) nom_echant = feuille_xls['C'+str(ligne)].value provenance = feuille_xls['D'+str(ligne)].value ded_contact = feuille_xls['E'+str(ligne)].value ded_10_cm = feuille_xls['F'+str(ligne)].value date_spectro = feuille_xls['G'+str(ligne)].value masse =feuille_xls['I'+str(ligne)].value conta_alpha_bq = feuille_xls['L'+str(ligne)].value conta_beta_bq = feuille_xls['M'+str(ligne)].value surf_frottee = feuille_xls['N'+str(ligne)].value commentaire = feuille_xls['O'+str(ligne)].value temp['num_caisse'] = num_caisse temp['nom_echant'] = nom_echant temp['provenance'] = provenance temp['ded_contact'] = ded_contact temp['ded_10_cm'] = ded_10_cm temp['date_spectro'] = date_spectro temp['masse'] = masse temp['conta_alpha_bq'] = conta_alpha_bq temp['conta_beta_bq'] = conta_beta_bq temp['surf_frottee'] = surf_frottee temp['commentaire'] = commentaire dico_synthese[ num_echant] = temp return dico_synthese def remplissage_fiche (a,b,c) : #ouverture du fichier et on se place dans le bon onglet wb = load_workbook(a, keep_links=True) ws = wb["Extraction"] ws["B1"]=c ws["B2"]=b['num_caisse'] ws["B3"]=b['nom_echant'] ws["B4"]=b['provenance'] ws["B5"]=b['ded_contact'] ws["B6"]=b['ded_10_cm'] ws["B7"]=b['date_spectro'] ws["B8"]=b['masse'] ws["B9"]=b['conta_alpha_bq'] ws["B10"]=b['conta_beta_bq'] ws["B11"]=b['surf_frottee'] ws["B12"]=b['commentaire'] #on retoure sur la fiche mesure pour mettre le logo feuille_xls = wb['Feuil1'] img = Image(logo,size=(50, None),nochangeaspect=True, nochangearrowheads=True) img.drawing.left = 85 img.drawing.top = 21 feuille_xls.add_image(img) wb.save(a) donnees_synthese = lecture_tableau_synthese(xls_synthese) excel_ref = path_xls_ref.split("\\") for value in excel_ref: if not value : excel_ref.remove(value) nom_excel_ref = excel_ref[-1] for key in donnees_synthese.keys() : # on créée le chemin vers le répertoire de la caisse path_rep = rep_resultat + "\\Caisse n " + str(donnees_synthese[key]['num_caisse']) # on test s'il existe ou non if os.path.isdir(path_rep) == FALSE : os.mkdir(path_rep) # on créée le chemin vers la fiche path_fiche = rep_resultat + "\\Caisse n " + str(donnees_synthese[key]['num_caisse']) + "\\" + str(key) +".xlsx" #on test si la fiche existe déjà ou non if os.path.isfile(path_fiche) == FALSE : # on copie l'excel de référence dans le nouveau répertoire shutil.copy(path_xls_ref,path_rep) # on renomme l'excel de référence nom_xls = str(path_rep) + "\\" +str(key)+".xlsx" path_temp_excel = str(path_rep) + "\\" + str(nom_excel_ref) #on renomme les fichiers excel os.rename(path_temp_excel,nom_xls) #on remplie les fichiers excel remplissage_fiche(nom_xls,donnees_synthese[key],key)