def getCellStyle(self): fnt = pyExcelerator.Font() fnt.colour_index = 0 al = pyExcelerator.Alignment() al.horz = pyExcelerator.Alignment.HORZ_CENTER al.vert = pyExcelerator.Alignment.VERT_CENTER pattern = pyExcelerator.Pattern() style = pyExcelerator.XFStyle() style.font = fnt style.borders = self.getDaulftBorder() style.alignment = al style.pattern = pattern return style
def getTitleStyle(self): fnt = pyExcelerator.Font() fnt.colour_index = 0 fnt.bold = True al = pyExcelerator.Alignment() al.horz = pyExcelerator.Alignment.HORZ_CENTER al.vert = pyExcelerator.Alignment.VERT_CENTER pattern = pyExcelerator.Pattern() pattern.pattern = 2 pattern.pattern_fore_colour = 30 pattern.pattern_back_colour = 95 style = pyExcelerator.XFStyle() style.font = fnt style.borders = self.getDaulftBorder() style.alignment = al style.pattern = pattern return style
def ExportExcel(self, event=None): """ Export Excel """ titre = _(u"Inscriptions") # Demande à l'utilisateur le nom de fichier et le répertoire de destination nomFichier = "ExportExcel_%s.xls" % datetime.datetime.now().strftime("%Y%m%d%H%M%S") wildcard = "Fichier Excel (*.xls)|*.xls|" \ "All files (*.*)|*.*" sp = wx.StandardPaths.Get() cheminDefaut = sp.GetDocumentsDir() dlg = wx.FileDialog( None, message = _(u"Veuillez sélectionner le répertoire de destination et le nom du fichier"), defaultDir=cheminDefaut, defaultFile = nomFichier, wildcard = wildcard, style = wx.SAVE ) dlg.SetFilterIndex(0) if dlg.ShowModal() == wx.ID_OK: cheminFichier = dlg.GetPath() dlg.Destroy() else: dlg.Destroy() return # Le fichier de destination existe déjà : if os.path.isfile(cheminFichier) == True : dlg = wx.MessageDialog(None, _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"), "Attention !", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION) if dlg.ShowModal() == wx.ID_NO : return False dlg.Destroy() else: dlg.Destroy() # Export import pyExcelerator # Création d'un classeur wb = pyExcelerator.Workbook() # Création d'une feuille ws1 = wb.add_sheet(titre) # Remplissage de la feuille fntLabel = pyExcelerator.Font() fntLabel.name = 'Verdana' fntLabel.bold = True al = pyExcelerator.Alignment() al.horz = pyExcelerator.Alignment.HORZ_LEFT al.vert = pyExcelerator.Alignment.VERT_CENTER ar = pyExcelerator.Alignment() ar.horz = pyExcelerator.Alignment.HORZ_RIGHT ar.vert = pyExcelerator.Alignment.VERT_CENTER pat = pyExcelerator.Pattern() pat.pattern = pyExcelerator.Pattern.SOLID_PATTERN pat.pattern_fore_colour = 0x01F styleLabel = pyExcelerator.XFStyle() styleLabel.alignment = al styleLabel.pattern = pat styleTotal = pyExcelerator.XFStyle() styleTotal.alignment = al styleTotal.pattern = pat styleTotal.font.bold = True styleTotalNbre = pyExcelerator.XFStyle() styleTotalNbre.alignment = ar styleTotalNbre.pattern = pat styleTotalNbre.font.bold = True styleEuros = pyExcelerator.XFStyle() styleEuros.num_format_str = '"$"#,##0.00_);("$"#,##' styleEuros.alignment = ar styleTotalEuros = pyExcelerator.XFStyle() styleTotalEuros.num_format_str = '"$"#,##0.00_);("$"#,##' styleTotalEuros.alignment = ar styleTotalEuros.pattern = pat styleTotalEuros.font.bold = True # Création des labels de colonnes x = 0 y = 0 for valeur in self.dictImpression["entete"] : ws1.write(x, y, valeur) ws1.col(y).width = 3000 y += 1 ws1.col(0).width = 10000 def RechercheFormat(valeur, titre): """ Recherche si la valeur est un nombre """ format = None # Si c'est un nombre try : nbre = float(valeur) if titre == True : format = styleTotalNbre return (nbre, format) except : pass return False, None # Contenu x = 1 y = 0 for ligne in self.dictImpression["contenu"] : for valeur in ligne : # Recherche si c'est un titre if x-1 in self.dictImpression["coloration"] : titre = True else: titre = False # Recherche s'il y a un format de nombre ou de montant nbre, format = RechercheFormat(valeur, titre) if nbre != False : valeur = nbre if nbre == False and titre == True and format == None : format = styleTotal # Enregistre la valeur if format != None : ws1.write(x, y, valeur, format) else: ws1.write(x, y, valeur) y += 1 x += 1 y = 0 # Total premiereLigne = True for ligne in self.dictImpression["total"] : for valeur in ligne : # Recherche si c'est un titre if premiereLigne == True : titre = True else: titre = False # Recherche s'il y a un format de nombre ou de montant nbre, format = RechercheFormat(valeur, titre) if nbre != False : valeur = nbre if nbre == False and titre == True and format == None : format = styleTotal # Enregistre la valeur if format != None : ws1.write(x, y, valeur, format) else: ws1.write(x, y, valeur) y += 1 premiereLigne = False x += 1 y = 0 # Finalisation du fichier xls wb.save(cheminFichier) # Confirmation de création du fichier et demande d'ouverture directe dans Excel txtMessage = _(u"Le fichier Excel a été créé avec succès. Souhaitez-vous l'ouvrir dès maintenant ?") dlgConfirm = wx.MessageDialog(None, txtMessage, _(u"Confirmation"), wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION) reponse = dlgConfirm.ShowModal() dlgConfirm.Destroy() if reponse == wx.ID_NO: return else: FonctionsPerso.LanceFichierExterne(cheminFichier)
def ExportExcel(listview=None, grid=None, titre=_(u"Liste"), listeColonnes=None, listeValeurs=None, autoriseSelections=True): """ Export de la liste au format Excel """ # Plus de sélection pour éviter les bugs !!!! autoriseSelections = False # Vérifie si données bien présentes if (listview != None and len(listview.donnees) == 0) or (grid != None and (grid.GetNumberRows() == 0 or grid.GetNumberCols() == 0)): dlg = wx.MessageDialog(None, _(u"Il n'y a aucune donnée dans la liste !"), "Erreur", wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return # Récupération des valeurs if listview != None and listeColonnes == None and listeValeurs == None : listeColonnes, listeValeurs = GetValeursListview(listview, format="original") if grid != None and listeColonnes == None and listeValeurs == None : autoriseSelections = False listeColonnes, listeValeurs = GetValeursGrid(grid) # Selection des lignes if autoriseSelections == True : dlg = DLG_Selection_liste.Dialog(None, listeColonnes, listeValeurs, type="exportExcel") if dlg.ShowModal() == wx.ID_OK: listeSelections = dlg.GetSelections() dlg.Destroy() else: dlg.Destroy() return False # Choix Action dlg = DLG_Choix_action(None) reponse = dlg.ShowModal() dlg.Destroy() if reponse == 100 : mode = "enregistrer" elif reponse == 200 : mode = "email" else : return # Définit le nom et le chemin du fichier nomFichier = "ExportExcel_%s.xls" % datetime.datetime.now().strftime("%Y%m%d%H%M%S") # Mode Enregistrer if mode == "enregistrer" : # Demande à l'utilisateur le nom de fichier et le répertoire de destination wildcard = "Fichier Excel (*.xls)|*.xls|" \ "All files (*.*)|*.*" sp = wx.StandardPaths.Get() cheminDefaut = sp.GetDocumentsDir() dlg = wx.FileDialog( None, message = _(u"Veuillez sélectionner le répertoire de destination et le nom du fichier"), defaultDir=cheminDefaut, defaultFile = nomFichier, wildcard = wildcard, style = wx.SAVE ) dlg.SetFilterIndex(0) if dlg.ShowModal() == wx.ID_OK: cheminFichier = dlg.GetPath() dlg.Destroy() else: dlg.Destroy() return # Le fichier de destination existe déjà : if os.path.isfile(cheminFichier) == True : dlg = wx.MessageDialog(None, _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"), "Attention !", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION) if dlg.ShowModal() == wx.ID_NO : return False dlg.Destroy() else: dlg.Destroy() # Mode Envoyer par Email if mode == "email" : cheminFichier = UTILS_Fichiers.GetRepTemp(fichier=nomFichier) # Export import pyExcelerator # Création d'un classeur wb = pyExcelerator.Workbook() # Création d'une feuille ws1 = wb.add_sheet(titre) # Remplissage de la feuille al = pyExcelerator.Alignment() al.horz = pyExcelerator.Alignment.HORZ_LEFT al.vert = pyExcelerator.Alignment.VERT_CENTER ar = pyExcelerator.Alignment() ar.horz = pyExcelerator.Alignment.HORZ_RIGHT ar.vert = pyExcelerator.Alignment.VERT_CENTER styleEuros = pyExcelerator.XFStyle() styleEuros.num_format_str = '"$"#,##0.00_);("$"#,##' styleEuros.alignment = ar styleDate = pyExcelerator.XFStyle() styleDate.num_format_str = 'DD/MM/YYYY' styleDate.alignment = ar styleHeure = pyExcelerator.XFStyle() styleHeure.num_format_str = "[hh]:mm" styleHeure.alignment = ar # Création des labels de colonnes x = 0 y = 0 for labelCol, alignement, largeur, nomChamp in listeColonnes : try : if "CheckState" in unicode(nomChamp) : nomChamp = "Coche" except : pass ws1.write(x, y, labelCol) ws1.col(y).width = largeur*42 y += 1 # ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- # Création des lignes def RechercheFormatFromChaine(valeur): """ Recherche le type de la chaîne """ if valeur.endswith(SYMBOLE) : # Si c'est un montant en euros try : if valeur.startswith("- ") : valeur = valeur.replace("- ", "-") if valeur.startswith("+ ") : valeur = valeur.replace("+ ", "") nbre = float(valeur[:-1]) return (nbre, styleEuros) except : pass # Si c'est un nombre try : if valeur.startswith("- ") : valeur = valeur.replace("- ", "-") nbre = float(valeur) return (nbre, None) except : pass # Si c'est une date try : if len(valeur) == 10 : if valeur[2] == "/" and valeur[5] == "/" : return (valeur, styleDate) except : pass if type(valeur) == datetime.timedelta : return (valeur, styleHeure) # Si c'est une heure try : if len(valeur) > 3 : if ":" in valeur : separateur = ":" elif "h" in valeur : separateur = "h" else : separateur = None if separateur != None : heures, minutes = valeur.split(separateur) valeur = datetime.timedelta(minutes= int(heures)*60 + int(minutes)) # valeur = datetime.time(hour=int(valeur.split(separateur)[0]), minute=int(valeur.split(separateur)[1])) return (valeur, styleHeure) except : pass return unicode(valeur), None # ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- def RechercheFormat(valeur): """ Recherche le type de la donnée """ if type(valeur) == decimal.Decimal : valeur = float(valeur) return (valeur, styleEuros) if type(valeur) == float : return (valeur, None) if type(valeur) == int : return (valeur, None) if type(valeur) == datetime.date : valeur = UTILS_Dates.DateDDEnFr(valeur) return (valeur, styleDate) if type(valeur) == datetime.timedelta : return (valeur, styleHeure) try : if len(valeur) > 3 : if ":" in valeur : separateur = ":" elif "h" in valeur : separateur = "h" else : separateur = None if separateur != None : donnees = valeur.split(separateur) if len(donnees) == 2 : heures, minutes = donnees if len(donnees) == 3 : heures, minutes, secondes = donnees valeur = datetime.timedelta(minutes= int(heures)*60 + int(minutes)) # valeur = datetime.time(hour=int(valeur.split(separateur)[0]), minute=int(valeur.split(separateur)[1])) return (valeur, styleHeure) except : pass if type(valeur) in (str, unicode) : if len(valeur) == 10 : if valeur[2] == "/" and valeur[5] == "/" : return (valeur, styleDate) if valeur[4] == "-" and valeur[7] == "-" : return (UTILS_Dates.DateEngFr(valeur), styleDate) return unicode(valeur), None # ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- x = 1 y = 0 for valeurs in listeValeurs : if autoriseSelections == False or int(valeurs[0]) in listeSelections : for valeur in valeurs : if valeur == None : valeur = u"" # Recherche s'il y a un format de nombre ou de montant if listview != None : valeur, format = RechercheFormat(valeur) #RechercheFormatFromChaine(valeur) else : valeur, format = RechercheFormatFromChaine(valeur) # Enregistre la valeur if format != None : ws1.write(x, y, valeur, format) else: ws1.write(x, y, valeur) y += 1 x += 1 y = 0 # Finalisation du fichier xls try : wb.save(cheminFichier) except : dlg = wx.MessageDialog(None, _(u"Il est impossible d'enregistrer le fichier Excel. Veuillez vérifier que ce fichier n'est pas déjà ouvert en arrière-plan."), "Erreur", wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return # Confirmation de création du fichier et demande d'ouverture directe dans Excel if mode == "enregistrer" : txtMessage = _(u"Le fichier Excel a été créé avec succès. Souhaitez-vous l'ouvrir dès maintenant ?") dlgConfirm = wx.MessageDialog(None, txtMessage, _(u"Confirmation"), wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION) reponse = dlgConfirm.ShowModal() dlgConfirm.Destroy() if reponse == wx.ID_NO: return else: FonctionsPerso.LanceFichierExterne(cheminFichier) # Envoyer par Email if mode == "email" : from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(None) dlg.ChargerModeleDefaut() dlg.SetPiecesJointes([cheminFichier,]) dlg.ShowModal() dlg.Destroy()
def ExportExcel(self, event=None): """ Export Excel """ if self.mode == "attente": titre = _(u"Inscriptions en attente") else: titre = _(u"Inscriptions refusées") # Demande à l'utilisateur le nom de fichier et le répertoire de destination nomFichier = "ExportExcel_%s.xls" % datetime.datetime.now().strftime( "%Y%m%d%H%M%S") wildcard = "Fichier Excel (*.xls)|*.xls|" \ "All files (*.*)|*.*" sp = wx.StandardPaths.Get() cheminDefaut = sp.GetDocumentsDir() dlg = wx.FileDialog( None, message= _(u"Veuillez sélectionner le répertoire de destination et le nom du fichier" ), defaultDir=cheminDefaut, defaultFile=nomFichier, wildcard=wildcard, style=wx.FD_SAVE) dlg.SetFilterIndex(0) if dlg.ShowModal() == wx.ID_OK: cheminFichier = dlg.GetPath() dlg.Destroy() else: dlg.Destroy() return # Le fichier de destination existe déjà : if os.path.isfile(cheminFichier) == True: dlg = wx.MessageDialog( None, _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?" ), "Attention !", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION) if dlg.ShowModal() == wx.ID_NO: return False dlg.Destroy() else: dlg.Destroy() # Export import pyExcelerator # Création d'un classeur wb = pyExcelerator.Workbook() # Création d'une feuille ws1 = wb.add_sheet(titre) fntLabel = pyExcelerator.Font() fntLabel.name = 'Verdana' fntLabel.bold = True al = pyExcelerator.Alignment() al.horz = pyExcelerator.Alignment.HORZ_LEFT al.vert = pyExcelerator.Alignment.VERT_CENTER ar = pyExcelerator.Alignment() ar.horz = pyExcelerator.Alignment.HORZ_RIGHT ar.vert = pyExcelerator.Alignment.VERT_CENTER pat = pyExcelerator.Pattern() pat.pattern = pyExcelerator.Pattern.SOLID_PATTERN pat.pattern_fore_colour = 0x01F styleDate = pyExcelerator.XFStyle() styleDate.alignment = al styleDate.font.bold = True # Entetes et largeurs des colonnes colonnes = [ (_(u"Date"), 8000), (_(u"Groupe"), 8000), (_(u"Dispo"), 2000), (_(u"N°"), 2000), (_(u"Individu"), 10000), (_(u"Date de saisie"), 10000), (_(u"Catégorie de tarif"), 10000), ] index = 0 for label, largeur in colonnes: ws1.col(index).width = largeur ws1.write(0, index, label) index += 1 # Contenu x = 1 for date, listeGroupes in self.listeImpression: for nomGroupe, listeIndividus in listeGroupes: for dictIndividu in listeIndividus: placeDispo = dictIndividu["placeDispo"] if placeDispo == True: placeDispoTxt = _(u"Oui") else: placeDispo = "" ws1.write(x, 0, date, styleDate) ws1.write(x, 1, nomGroupe) ws1.write(x, 2, placeDispo) ws1.write(x, 3, dictIndividu["num"]) ws1.write(x, 4, dictIndividu["nomIndividu"]) ws1.write(x, 5, dictIndividu["texteDateSaisie"]) ws1.write(x, 6, dictIndividu["nomCategorie"]) x += 1 # Finalisation du fichier xls wb.save(cheminFichier) # Confirmation de création du fichier et demande d'ouverture directe dans Excel txtMessage = _( u"Le fichier Excel a été créé avec succès. Souhaitez-vous l'ouvrir dès maintenant ?" ) dlgConfirm = wx.MessageDialog( None, txtMessage, _(u"Confirmation"), wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) reponse = dlgConfirm.ShowModal() dlgConfirm.Destroy() if reponse == wx.ID_NO: return else: FonctionsPerso.LanceFichierExterne(cheminFichier)
# coding=utf-8 # code by sakura_xp 11:56 2010-10-31 # Revised by Zhushiqi from YZR 15:40 2017-8-24 # python + pyExcelerator import pyExcelerator, sys, re import time # from pyExcelerator import * ###################################################################### alignC = pyExcelerator.Alignment() alignC.horz = pyExcelerator.Alignment.HORZ_CENTER alignC.vert = pyExcelerator.Alignment.VERT_CENTER alignL = pyExcelerator.Alignment() alignL.horz = pyExcelerator.Alignment.HORZ_LEFT alignL.vert = pyExcelerator.Alignment.VERT_CENTER alignR = pyExcelerator.Alignment() alignR.horz = pyExcelerator.Alignment.HORZ_RIGHT alignR.vert = pyExcelerator.Alignment.VERT_CENTER dic_Alignment = {'left': alignL, 'center': alignC, 'right': alignR} dic_Font = {} # 字体 dic_Border = {} # 表格边框 dic_Style = {} # 单元格样式 dic_RowStyle = {} # 行高