2013-06-16 9 views
8

Uso Xlwt per scrivere un file excel. E 'cellule ha un certo stile (colore, allineamento, bordi, ...)xlwt imposta errori di stile: oltre 4094 XF (stili)

quando uso XFStyle e impostare i confini e altre attr di stile, in alcuni casi fare errore: Più di 4094 XFS (stili)

perché? cosa devo fare con questo errore?

grazie

+1

Dai un'occhiata a questa discussione: https://groups.google.com/forum/?fromgroups#!topic/python-excel/xxetAMesyEg. – alecxe

+0

L'ho visto prima, la soluzione menzionata in questo link non ha aiutato. –

risposta

14

Ho letto e funzioni e metodi che invita durante l'esecuzione traccia.

trovo soluzione:

wb = xlwt.Workbook(style_compression=2) 

uso: style_compression = 2

il suo lavoro!

+1

NOTA: se hai affrontato questo problema senza usare molti stili, probabilmente hai fatto qualcosa di sbagliato. Non chiamare 'easyxf()' per descrivere uno stile ripetutamente in cicli, per esempio. –

+0

Correggere la correzione dovrebbe essere per riutilizzare gli stili. Non credo che tu abbia 4094 stili diversi ... Ho risposto in seguito, perché è più valido. –

+0

Funziona .. grazie –

4

Quando incontra lo stesso problema nel LOOP ho estratto la descrizione di formato dal loop e continuato uniformemente:

questo non ha funzionato:

for ... : 
    ws. row(row_index).write(col_index, value, easyxf('pattern: pattern solid, fore_colour yellow; align: wrap 1')) 

ma ciò:

ostyle = easyxf('pattern: pattern solid, fore_colour yellow; align: wrap 1') 

for .... : 
    ws.row(row_index).write(col_index, value,ostyle) 
2

Quindi, per le generazioni future, chiunque tu stia cercando una risposta, fai qualcosa di sbagliato nel tuo codice.

In sostanza, ciò che accade con il codice è che hai generato oltre 4094 istanze di stili diversi (importanti, non diversi stili, è sufficiente se crei nuove istanze di stile).

Nel nostro caso abbiamo avuto qualcosa di simile:

for i, row in enumerate(rows): 
    workbook.write(i, 0, row, currency_formatter(row)) 

Dove formattatore di valuta è stato creato il nuovo stile per ogni riga.

Quello che dovevamo fare era memorizzare nella cache lo stile per ogni valuta se lo stile era lo stesso.

Quindi, correggere correttamente non è quello di creare tanti stili!

Cheers, Mike.