2017-08-10 1 views
0

Mein Python-Skript soll überprüfen, ob eine bestimmte Zeichenfolge in einer Zelle enthalten ist. Wenn diese Bedingung erfüllt ist, muss das Skript die Hintergrundfarbe einer Zelle in einer anderen Datei ändern. Dieser Vorgang wird mehrmals in einer for-Schleife wiederholtOpenpyxl - Hintergrundfarbe ist nicht in Datei gespeichert

from openpyxl.styles import PatternFill 
column_color = sheet_database.cell(row = nextitem , column = 18).value 
      cell_paint = sheet_blatt.cell(row = 7 + multiplicator * 10 , column = selected_column + 1).fill 
      if column_color == 'AAAAAA': 
       cell_paint = PatternFill(fgColor='C00000', bgColor='C00000', fill_type='solid') 

      elif column_color == 'BBBBBB': 
       cell_paint = PatternFill(fgColor='FF0000', bgColor='FF0000', fill_type='solid') 

Aus irgendeinem Grunde wird die Farbe nicht in die Datei am Ende gespeichert. Der Rest des Skripts ändert nur die Werte von Zellen, sodass die Farbe nicht von einem anderen Teil des Skripts überschrieben werden kann. Der Debugger zeigt auch, dass die if-Klausel eingegeben und ausgeführt wird.

wb_blatt.save('XXXX_' + str(number) + '.xlsx') 

wird verwendet, um das Endergebnis zu speichern.

+0

Ich denke, youre soll verwenden 'start_color' und' end_color' wenn Farbe Hex-Codes verwenden. siehe hier - http://openpyxl.readthedocs.io/en/default/api/openpyxl.styles.fills.html?highlight=fgColor – droravr

+0

Hilft mir nicht. Es gibt keine Änderungen in den Dateien. – Venturion

+0

Sie können dazu auch bedingte Formatierungsregeln schreiben. –

Antwort

0

Versuchen Sie folgendes:

from openpyxl.styles import PatternFill 

column_color = sheet_database.cell(row=nextitem, column=18).value 
cell = sheet_blatt.cell(row=7 + multiplicator * 10, column=selected_column + 1) 
if column_color == 'AAAAAA': 
    cell.fill = PatternFill(fgColor='C00000', bgColor='C00000', fill_type='solid') 

elif column_color == 'BBBBBB': 
    cell.fill = PatternFill(fgColor='FF0000', bgColor='FF0000', fill_type='solid') 
+0

Danke :) Ich habe es vor ein paar Minuten selbst herausgefunden, als ich deinen Beitrag gesehen habe. Warum besteht jedoch ein Unterschied zwischen dem Aufruf von fill für eine Variable, die ein Zellobjekt enthält, und dem Aufruf von fill direkt an das Zellobjekt? – Venturion

+0

@Venturion Wie du es zuerst getan hast, hast du gerade die Variablenreferenz von einem 'PatternFill'-Objekt in ein neues verschoben, nicht wirklich die' fill'-Variable in der aktiven Zelle geändert (ich hoffe, es ist klar genug). Vielleicht ist dies eine bessere Erklärung - https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/ – droravr

+0

danke für die Erklärung – Venturion

Verwandte Themen