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(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)
def exportXlsData(self): """get XLS file for all folder objects""" filename = datetime.now().strftime('ict_%Y%m%d%H%M%S.xls') f_handle, f_name = tempfile.mkstemp(filename) wbook = Workbook() wb_hosts = wbook.add_sheet('ddd') style0 = XFStyle() font0 = Font() font0.height = 6 * 20 style0.num_format_str = '@' style0.font = font0 style1 = XFStyle() font1 = Font() font1.height = 6 * 20 style1.num_format_str = '@' style1.font = font1 heading_pattern = xl.Pattern() heading_pattern.pattern = xl.Pattern.SOLID_PATTERN heading_pattern.pattern_back_colour = 0x5 heading_pattern.pattern_fore_colour = 0x5 fields = self.fields attrList = [fname for fname, fval in fields.items()] itemList = self.context.items() pos_y = 0 pos_x = 0 for attr in attrList: wb_data = Formula(u'"%s"' % attr) style0.pattern = heading_pattern wb_hosts.write(pos_y, pos_x, wb_data, style0) pos_x += 1 # IntID wb_data = Formula(u'"IntID"') wb_hosts.write(pos_y, pos_x, wb_data, style0) pos_x += 1 # objectID wb_data = Formula(u'"objectID"') wb_hosts.write(pos_y, pos_x, wb_data, style0) wb_hosts.col(pos_x).width *= 3 pos_x += 1 pos_y = 1 # allAttributes = {} for interface in implementedBy(self.factory): for i_attrName in interface: i_attr = interface[i_attrName] if IField.providedBy(i_attr): allAttributes[i_attrName] = i_attr # for item_n, item_v in itemList: pos_x = 0 for attr in attrList: # from zope.interface import implementedBy # ff=self.factory # tt=[i for i in implementedBy(ff)] # it=tt[-1] #attrField = self.attrInterface[attr] attrField = allAttributes[attr] # tmpFieldProperty = getattr(self.factory, attr) # if hasattr(tmpFieldProperty, '_FieldProperty__field'): # attrField = getattr(self.factory, attr)._FieldProperty__field attrDm = datamanager.AttributeField(item_v, attrField) v_style = XFStyle() v_font = Font() v_font.height = 6 * 20 v_style.font = v_font value = None if IChoice.providedBy(attrField): v_style.num_format_str = '@' dateValue = attrDm.get() v_widget = getMultiAdapter(\ (attrField,self.request), interfaces.IFieldWidget) v_widget.context = item_v # dm = zope.component.getMultiAdapter( # (self.content, field.field), interfaces.IDataManager) # zope.component.getMultiAdapter( # (self.context, # self.request, # self.form, # getattr(widget, 'field', None), # widget), # interfaces.IValidator).validate(fvalue) # dm = zope.component.getMultiAdapter( # (self.__context__, field), interfaces.IDataManager) v_dataconverter = queryMultiAdapter(\ (attrDm.field, v_widget), interfaces.IDataConverter) #print u"ddd55: %s: %s" % (attr, dateValue) if dateValue is not None: value = v_dataconverter.toWidgetValue(dateValue)[0] #print "value3-> %s: %s " % (attr, value) # elif ICollection.providedBy(attrField): # v_style.num_format_str = '@' # value = getattr(item_v, attr) # print "ddd66: %s: %s" % (attr, value) # elif IBool.providedBy(attrField): # v_style.num_format_str = '@' # value = getattr(item_v, attr) # print "value2-> %s: %s " % (attr, value) else: v_style.num_format_str = '@' dateValue = attrDm.get() v_widget = getMultiAdapter(\ (attrField,self.request), interfaces.IFieldWidget) v_widget.context = item_v v_dataconverter = queryMultiAdapter(\ (attrDm.field, v_widget), interfaces.IDataConverter) #d2 = queryMultiAdapter((attrDm.field, v_widget),interfaces.IDataConverter) if dateValue is not None: value = v_dataconverter.toWidgetValue(dateValue) if type(value) is list: value = u";".join(value) #print u"value1-> %s: %s " % (attr, value) if value is not None: #print u"wb_hosts.write(%s, %s, %s, %s)" % (pos_y, pos_x, value, v_style) wb_hosts.write(pos_y, pos_x, value, v_style) pos_x += 1 # IntID uidutil = queryUtility(IIntIds) wb_data = Formula(u'"%s"' % uidutil.getId(item_v)) wb_hosts.write(pos_y, pos_x, wb_data, style0) pos_x += 1 # objectID wb_data = Formula(u'"%s"' % item_v.objectID) wb_hosts.write(pos_y, pos_x, wb_data, style0) pos_x += 1 pos_y += 1 wbook.save(f_name) self.request.response.setHeader('Content-Type', 'application/vnd.ms-excel') self.request.response.setHeader(\ 'Content-Disposition', 'attachment; filename=\"%s\"' % filename) setNoCacheHeaders(self.request.response) datafile = open(f_name, "r") dataMem = datafile.read() datafile.close() os.remove(f_name) return dataMem
def exportXlsData(self, request, sheetName=u'ict', wbook=None): """get XLS file for all folder objects""" if wbook is None: localWbook = True filename = datetime.now().strftime('ict_%Y%m%d%H%M%S.xls') f_handle, f_name = tempfile.mkstemp(filename) wbook = Workbook() else: localWbook = False wb_hosts = wbook.add_sheet(getattr(self, 'ikName', sheetName)) style0 = XFStyle() font0 = Font() font0.height = 6 * 20 #style0.num_format_str = '@' style0.font = font0 style1 = XFStyle() font1 = Font() font1.height = 6 * 20 #style1.num_format_str = '@' style1.font = font1 heading_pattern = xl.Pattern() heading_pattern.pattern = xl.Pattern.SOLID_PATTERN heading_pattern.pattern_back_colour = 0x5 heading_pattern.pattern_fore_colour = 0x5 fields = fieldsForFactory(self.contentFactory, ['objectID']) attrList = [fname for fname, fval in fields.items()] itemList = self.items() pos_y = 0 pos_x = 0 for attr in attrList: style0.pattern = heading_pattern wb_hosts.write(pos_y, pos_x, attr, style0) pos_x += 1 # objectID wb_hosts.write(pos_y, pos_x, "objectID", style0) wb_hosts.col(pos_x).width *= 3 pos_x += 1 pos_y = 1 # allAttributes = {} for interface in implementedBy(self.contentFactory): for i_attrName in interface: i_attr = interface[i_attrName] if IField.providedBy(i_attr): allAttributes[i_attrName] = i_attr # for item_n, item_v in itemList: pos_x = 0 for attr in attrList: attrField = allAttributes[attr] attrDm = datamanager.AttributeField(item_v, attrField) v_style = XFStyle() v_font = Font() v_font.height = 6 * 20 v_style.font = v_font value = None if IChoice.providedBy(attrField): v_style.num_format_str = '@' # try: dateValue = attrDm.get() v_widget = getMultiAdapter(\ (attrField,request), interfaces.IFieldWidget) v_widget.context = item_v v_dataconverter = queryMultiAdapter(\ (attrDm.field, v_widget), interfaces.IDataConverter) # except AttributeError, errText: # print "Error2: ### ", errText # print "item_v: ", item_v # print "item_v.ikName: ", item_v.ikName # print "attr: ", attr # dateValue = None # #import pdb # #pdb.set_trace() if dateValue is not None: # try: valueVector = v_dataconverter.toWidgetValue(dateValue) if len(valueVector) > 0: value = valueVector[0] # except IndexError, errText: # print "Error3: ### ", errText # print "item_v: ", item_v # print "item_v.ikName: ", item_v.ikName # print "attr: ", attr else: v_style.num_format_str = '@' try: # import pdb # pdb.set_trace() dateValue = attrDm.get() v_widget = getMultiAdapter(\ (attrField,request), interfaces.IFieldWidget) v_widget.context = item_v v_dataconverter = queryMultiAdapter(\ (attrDm.field, v_widget), interfaces.IDataConverter) except AttributeError, errText: print "Error1: ### ", errText print "item_v: ", item_v print "item_v.ikName: ", item_v.ikName print "attr: ", attr dateValue = None if dateValue is not None: try: value = v_dataconverter.toWidgetValue(dateValue) except AttributeError, errText: print "Error4: ### ", errText print "item_v: ", item_v print "item_v.ikName: ", item_v.ikName print "attr: ", attr value = None if type(value) is list: value = u";".join(value) if value is not None: wb_hosts.write(pos_y, pos_x, value, v_style) pos_x += 1