2015-08-12 2 views
0

Je souhaite lire les données de la base de données et les convertir en liste de dictionnaires pour les placer dans un fichier XLS à des fins de création de rapports.Comment parcourir et imprimer la liste des dictionnaires dans xls en utilisant python

J'ai essayé code python pour le rapport, car il est plus facile pour moi écrire du code avec des connaissances de programmation minimum

Je veux écrire la liste des dictionnaires dans la liste des dictionnaires à un fichier XLS.

J'essaie de générer le fichier xls mais pas obtenir le résultat correctement

data1 = [{'a':1,'b':2,'c':[{'d':4,'e':5},{'d':8,'e':9}]},{'a':5,'b':3,'c':[{'d':8,'e':7},{'d':1,'e':3}]}] 

#Output need to be print like this in excel 
A B D E 
1 2 
     4 5 
     8 9 
5 3  
     8 7 
     1 3 

Voici le code i essayé

try: 
    import xlwt 
except Exception, e: 
    raise osv.except_osv(_('User Error'), _('Please Install xlwt Library.!')) 
filename = 'Report.xls' 
string = 'enquiry' 
worksheet = wb.add_sheet(string) 
data1 = [{'a':1,'b':2,'c':[{'d':4,'e':5},{'d':8,'e':9}]},{'a':5,'b':3,'c':[{'d':8,'e':7},{'d':1,'e':3}]}] 
i=0;j=0;m=0; 
if data1: 
    columns = sorted(list(data1[0].keys())) 
worksheet.write_merge(0, 0, 0, 9, 'Report') 
worksheet.write(2,0,"A") 
worksheet.write(2,1,"B") 
worksheet.write(2,2,"D") 
worksheet.write(2,3,"E") 
for i, row in enumerate(data1,3): 
    for j, col in enumerate(columns): 
     if type(row[col]) != list: 
      worksheet.write(i+m, j, row[col], other_tstyle1) 
     else: 
      #if list then loop and group it in new cell 
      if row[col] != []: 
       row_columns = sorted(list(row[col][0].keys())) 
       for k, row1 in enumerate(row[col],1): 
        for l, col1 in enumerate(row_columns): 
         worksheet.write(k+m+1, l+3, row1[col1]) 
         #iteration of m for new row 
         m+=1 
        #m+=1 

Je suis sortie comme ça

A B D E 
1 2 
     4 
      5 
     8 
      9 
5 3 
     8 
      7 
     1 
      3 
+0

Dans vos données 'C' est une liste avec quelques objets. Je n'ai absolument aucune idée de comment et par quelles règles la liste des objets transforment dans la colonne vide dans le résultat. De mon point de vue, les données pour les deux premières lignes devraient être: [{'a': 1, 'b': 2, 'c': '', 'd': '', 'e': ''}, { 'a': '', 'b': '', 'c': '', 'd': 4, 'e': 5}] –

+0

@ m9_psy question mise à jour –

Répondre

0

Je pense c'est parce que vous avez

m += 1 

dans votre boucle interne. Donc, pour chaque élément de c, vous le posez sur une ligne de plus. À votre avis, il est préférable d'utiliser des noms de variables significatifs que des lettres pour les variables (par exemple, row_offset).

+0

oui la boucle externe est correcte mais si j'utilise celui comme dans le code de commentaire m + = 1 il jette une erreur que l'écrasement dans la feuille de calcul.Il s'agit juste d'un morceau de code utilisé dans l'application –

+0

Eh bien, je pense que cela devrait être votre question - pas celle de l'impression hors ligne. Mais, vous devrez ajouter plus d'informations sur l'erreur. – jcfollower