Generare file Excel XLS dinamicamente
Utilizzando la libreria Python pyExcelerator è possibile generare automaticamente file Excel XLS, con dati e formule dinamici.
Supponi di voler generare automaticamente dei file Excel XLS per formattare dei dati in tuo possesso ed introducendo elementi di dinamicità quali per esempio formule e statistiche.
Un possibile caso d'uso potrebbe essere: integrare nella tua applicazione Web una funzionalità che permetta di scaricare ed usare un file XLS generato automaticamente dal sistema e corredato da utili formule e statistiche. Una volta scaricato il file può essere aperto con OpenOffice o Excel, modificato manualmente o stamparli, ecc.
Con Python è possibile fare tutto ciò con poso sforzo utilizzando la liberia pyExcelerator per esempio.
Qui di seguito ecco del codice di esempio che mostra come creare un file XLS chiamato demo.xls. Una volta presa confidenza con la libreria è praticamente immediato includere delle logiche simili nel CMS Plone.
Quindi installa pyExcelerator, crea un file demo.py contenente il seguente codice ed eseguilo, otterrai il seguente file come risultato: demo.xls.
# demo.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Autore: Davide Moro <davide.moro@redomino.com>
from pyExcelerator import Workbook
from pyExcelerator import Formula
from pyExcelerator import Font
from pyExcelerator import XFStyle
from pyExcelerator.Utils import rowcol_to_cell
from pyExcelerator.Utils import col_by_name
font = Font()
font.name = 'Verdana'
font.bold = True
font.colour_index = 4
style = XFStyle()
style.font = font
class DemoXLS:
""" Questa classe creerà un file XLS di esempio, distinto
in due fogli.
Il codice è solo di esempio, quindi non è assolutamente
ottimizzato.
"""
def __init__(self):
self.wb = Workbook()
self.sheet1 = self.wb.add_sheet('Esempio input e formule varie')
self.sheet2 = self.wb.add_sheet('Esempio risposte quiz e risultati')
def run_sheet1(self):
"""
Dati due campi numerici input1 ed input2, vengono aggiornati altri
campi automaticamente grazie alle formule.
"""
ws = self.sheet1
ws.write_merge(0,0,0,1, 'Esempio input e formule')
ws.write(1, 0, 'Input 1')
ws.write(1, 1, Formula("2"))
ws.write(2, 0, 'Input 2')
ws.write(2, 1, Formula("3"))
ws.write(3, 0, 'Moltiplicazione')
ws.write(3, 1, Formula("B2*B3"))
ws.write(4, 0, 'Somma semplice')
ws.write(4, 1, Formula("B2+B3"))
ws.write(5, 0, 'Sommatoria')
ws.write(5, 1, Formula("SUM(B2:B3)"))
ws.write(6, 0, 'Sommatoria complessa')
ws.write(6, 1, Formula("SUM(B2:B3;B5)"))
ws.write(7, 0, 'Media')
ws.write(7, 1, Formula("AVERAGE(B2:B3)"))
ws.write(8, 0, 'IF')
ws.write(8, 1, Formula('IF(B2>B3;"B2>=B3 vero";"B2<B3 falso")'))
def run_sheet2(self):
"""
Tabella di esempio che si dovrà ottenere:
domanda1 domanda2 risultato promosso
utente1 1 0 1 bocciato
utente2 5 5 10 promosso
...
Volendo a piacere è possobile aggiungere altre statistiche
a piacere (media per singola domanda, media sul risultato
finale, numero promossi, ecc).
Una volta generato il file XLS è poi possibile editarlo
manualmente cambiando i valori ed i campi risultato e
promosso verranno automaticamente aggiornati grazie alle
formule.
"""
domande = ['Domanda1', 'Domanda2', 'Risultato', 'Promosso']
risultati = [
['Utente1', (1,0,)],
['Utente2', (5,5,)],
]
ws = self.sheet2
# Scrivo l'header
j = 1
for domanda in domande:
ws.write(0, j, domanda)
j+=1
# scrivo i risultati
i = 1
for risultato in risultati:
user = risultato[0]
voti = risultato[1]
j = 0
ws.write(i, j, user, style)
for voto in voti:
j+=1
ws.write(i, j, voto)
rowcol_to_cell(i,j)
ws.write(i, j+1, Formula("SUM(%s:%s)" % (rowcol_to_cell(i,
1,
0,
1),
rowcol_to_cell(i,
j,
0,
1))))
risultato_cell = rowcol_to_cell(i,j+1)
ws.write(i,
j+2,
Formula('IF(%s>6;"PROMOSSO";"BOCCIATO")' % \
risultato_cell))
i+=1
def write(self, filename):
self.run_sheet1()
self.run_sheet2()
self.wb.save(filename)
if __name__ == "__main__":
xls_gen = DemoXLS()
xls_gen.write('demo.xls')
Link utili
Ma perché non trovo la documentazione???
Mi sai dare qualche suggerimento per reperire la documentazione di questa libreria?
Spero di non doverla generare e spero ci sia... (sgrunt!)
Re: Ma perché non trovo la documentazione???
probabilmente non esiste la documentazione per questo pacchetto ma all'interno del codice sorgente troverai una numerosa sezione di esempi che possono esserti utile per partire facilmente con questa libreria.

generazione file Excel
http://www.python-excel.org/