2016-06-29 2 views
3

Ich habe ein Problem mit xlsxwriter (auch mit openpyxl) und Excel. Das Spaltenformat wird nicht verwendet, bis ich die Arbeitsmappe öffne, auf die Zelle klicke und dann die Eingabetaste drücke. Die Spalte hat das richtige Format, zeigt dieses Format jedoch erst an, wenn die gerade aufgeführten Schritte ausgeführt wurden. Ich habe sichergestellt, dass mein Excel die automatische Berechnung aktiviert hat. Auch mit der gleichen Codezeile sind einige Spalten gut formatiert, andere nicht.xlsxwriter/openpyxl: Excel zeigt das richtige Format, aber es gilt nicht bis zum Ändern der Zelle

wb = xlsxwriter.Workbook(filename) 
ws = wb.add_worksheet() 
numeric = wb.add_format() 
numeric.set_num_format(0x02) # also tried with 0x44 accounting, same results 
... (get the request csv object) 
for item in (request): 
    col=0 
    row +=1 
    for field in fields: 
     if field: 
     ws.write(row, col,item[field]) 
     col += 1 
    if 'inventory' in item: 
     if len(item['inventory']) > 0: 
     ws.write(row, col,item['inventory'][0]['count'],numeric) 
     ws.write(row, col+1,item['inventory'][0]['reorder_point'],numeric) 
     ws.write(row, col+2,item['inventory'][0]['restock_level'],numeric) 

ws.set_column('Q2:Q'+str(row+1), 10, numeric) 
ws.set_column('R2:R'+str(row+1), 10, numeric) 
ws.set_column('T2:T'+str(row+1), 10, numeric) 
ws.set_column('U2:U'+str(row+1), 10, numeric) 
ws.set_column('V2:V'+str(row+1), 10, numeric) 
ws.set_column('AB2:AB'+str(row+1), 10, numeric) 
ws.set_column('AC2:AC'+str(row+1), 10, numeric) 
ws.set_column('AD2:AD'+str(row+1), 10, numeric) 

wb.close() 

In diesem verkürzten Code, Spalten Q, U, V, AB, AC und AD nicht korrekt angezeigt, während Spalten R und T der Fall ist. Da ich das gleiche Problem mit xlsxwriter und openpyxl habe, gibt es ein Problem mit Excel? Was mache ich falsch? Und letzter letzter Hinweis: wenn ich das Spaltenformat in Excel ändere, tut es nichts außer auf den neu berechneten (Doppelclique) Zellen der Spalte. Vielen Dank für Ihre Hilfe.

Antwort

1

Die Syntax der XlsxWriter set_column() Methode ist:

set_column(first_col, last_col, width, cell_format, options) 

Statt der numerischen Null first_col, last_col indiziert können Sie A:D Stil Notation Excel verwenden:

worksheet.set_column('E:E', 20) 

jedoch Sie in Ihrem Beispiel verwenden ein 2D-Bereich wie:

ws.set_column('Q2:Q5', 10, numeric) 

Das ist nicht gültig.

+0

John, sollte nicht Xlsxwriter in diesem Fall Ausnahmen auslösen? –

+0

Es sollte, und es wird, aber das ist das erste Mal, dass ich dieses Problem gesehen habe. – jmcnamara

+0

Nun, TBH 'set_column' ist ziemlich klar, aber die Benutzer sind da, um uns zu testen! ;-) –

Verwandte Themen