Einstellungsstile in Openpyxl

Ich brauche Ratschläge zur Einstellung von Stilen in Openpyxl.

Ich sehe, dass die NumberFormat einer Zelle gesetzt werden kann, aber ich verlange auch die Einstellung von Schriftfarben und Attributen (fett usw.). Es gibt eine style.py-Klasse, aber es scheint, dass ich das Style-Attribut einer Zelle nicht setzen kann, und ich möchte nicht wirklich mit dem Openpyxl-Quellcode beginnen.

Hat jemand eine Lösung dafür gefunden?

6 Solutions collect form web for “Einstellungsstile in Openpyxl”

Wie von openpyxl Version 1.5.7 habe ich die folgenden Arbeitsblatt-Stiloptionen erfolgreich angewendet …

from openpyxl.reader.excel import load_workbook from openpyxl.workbook import Workbook from openpyxl.styles import Color, Fill from openpyxl.cell import Cell # Load the workbook... book = load_workbook('foo.xlsx') # define ws here, in this case I pick the first worksheet in the workbook... # NOTE: openpyxl has other ways to select a specific worksheet (ie by name # via book.get_sheet_by_name('someWorksheetName')) ws = book.worksheets[0] ## ws is a openpypxl worksheet object _cell = ws.cell('C1') # Font properties _cell.style.font.color.index = Color.GREEN _cell.style.font.name = 'Arial' _cell.style.font.size = 8 _cell.style.font.bold = True _cell.style.alignment.wrap_text = True # Cell background color _cell.style.fill.fill_type = Fill.FILL_SOLID _cell.style.fill.start_color.index = Color.DARKRED # You should only modify column dimensions after you have written a cell in # the column. Perfect world: write column dimensions once per column # ws.column_dimensions["C"].width = 60.0 

FYI, findest du die Namen der Farben in openpyxl/style.py … Ich openpyxl/style.py ich manchmal in extra Farben aus den X11 Farbnamen

 class Color(HashableObject): """Named colors for use in styles.""" BLACK = 'FF000000' WHITE = 'FFFFFFFF' RED = 'FFFF0000' DARKRED = 'FF800000' BLUE = 'FF0000FF' DARKBLUE = 'FF000080' GREEN = 'FF00FF00' DARKGREEN = 'FF008000' YELLOW = 'FFFFFF00' DARKYELLOW = 'FF808000' 

Ab openpyxl 2.0 sind Stile unveränderlich.

Wenn du eine cell hast, kannst du (zB) fett formatieren durch:

cell.style = cell.style.copy(font=cell.style.font.copy(bold=True))

Ja, das ist nervig.

Ab openpyxl 2.0 wird das Festlegen von Zellenstilen durch das Erstellen neuer Stilobjekte und durch Zuweisen von Eigenschaften einer Zelle durchgeführt.

Es gibt mehrere PatternFill : Font , PatternFill , Border und Alignment . Siehe doc .

Um eine Stileigenschaft einer Zelle zu ändern, müssen Sie zuerst das vorhandene Stilelement aus der Zelle kopieren und den Wert der Eigenschaft ändern oder ein neues Stylesheet mit den gewünschten Einstellungen erstellen. Dann ordne das neue Stilobjekt der Zelle zu.

Beispiel für die Einstellung der Schriftart fett und kursiv der Zelle A1:

 from openpyxl import Workbook from openpyxl.styles import Font # Create workbook wb = Workbook() # Select active sheet ws = wb.active() # Select cell A1 cell = ws['A1'] # Make the text of the cell bold and italic cell.font = cell.font.copy(bold=True, italic=True) 

Ab openpyxl-1.7.0 kannst du das auch machen:

 cell.style.fill.start_color.index = "FF124191" 

Ich habe ein paar Helfer-Funktionen, die einen Stil auf eine gegebene cell – Dinge wie Header, Fußzeilen etc.

Wie openpyxl doc sagte:

Dies ist ein Open-Source-Projekt, das von Freiwilligen in ihrer Freizeit gepflegt wird. Dies kann auch bedeuten, dass bestimmte Funktionen oder Funktionen, die Sie möchten, fehlen.

Ich überprüfte openpyxl Quellcode, festgestellt, dass:

Bis openpyxl 1.8.x sind Stile veränderlich. Ihr Attribut kann direkt wie folgt zugeordnet werden:

 from openpyxl.workbook import Workbook from openpyxl.style import Color wb = Workbook() ws = wb.active ws['A1'].style.font.color.index = Color.RED 

Allerdings sind aus dem Openpyxl 1.9 Stile unveränderlich.

Styles werden zwischen Objekten geteilt und sobald sie zugeordnet sind, können sie nicht geändert werden. Dies stoppt unerwünschte Nebenwirkungen wie das Ändern des Stils für viele Zellen, wenn anstelle von nur einem.

Um ein neues Style-Objekt zu erstellen, kannst du es direkt zuordnen oder aus dem Stil einer vorhandenen Zelle mit neuen Attributen kopieren, auf die Frage als Beispiel antworten (mein chinesisches Englisch vergeben):

 from openpyxl.styles import colors from openpyxl.styles import Font, Color from openpyxl import Workbook wb = Workbook() ws = wb.active a1 = ws['A1'] d4 = ws['D4'] # create a new style with required attributes ft_red = Font(color=colors.RED) a1.font = ft_red # you can also do it with function copy ft_red_bold = ft_red.copy(bold=True) # you can copy from a cell's style with required attributes ft_red_sigle_underline = a1.font.copy(underline="single") d4.font = ft_red_bold # apply style to column E col_e = ws.column_dimensions['E'] col_e.font = ft_red_sigle_underline 

Eine Zelle 'style enthält diese Attribute: font, fill, border, alignment, protection und number_format. Überprüfe openpyxl.styles .

Sie sind ähnlich und sollten als Objekt erstellt werden, außer number_format, sein Wert ist string Typ.

Einige vordefinierte Zahlenformate stehen zur Verfügung, Zahlenformate können auch im String-Typ definiert werden. Überprüfe openpyxl.styles.numbers .

 from openpyxl.styles import numbers # use pre-defined values ws.cell['T49'].number_format = numbers.FORMAT_GENERAL ws.cell(row=2, column=4).number_format = numbers.FORMAT_DATE_XLSX15 # use strings ws.cell['T57'].number_format = 'General' ws.cell(row=3, column=5).number_format = 'd-mmm-yy' ws.cell['E5'].number_format = '0.00' ws.cell['E50'].number_format = '0.00%' ws.cell['E100'].number_format = '_ * #,##0_ ;_ * -#,##0_ ;_ * "-"??_ ;_ @_ ' 

Für openpyxl Version 2.4.1 und oben verwenden Sie unten Code, um Schriftfarbe einzustellen:

 from openpyxl.styles import Font from openpyxl.styles.colors import Color ws1['A1'].font = Font(color = "FF0000") 

Hex-Codes für verschiedene Farben finden Sie unter: http://dmcritchie.mvps.org/excel/colors.htm

  • Ist openpyxl das schnellste Paket zu verwenden, um große xlsx Dateien zu lesen?
  • Konvertieren von .XLSX zu .XLS in Python mit win32com.client Modul
  • Kopieren von xlsx zu einem bestimmten Blatt in einem anderen xlsx
  • Python ist die beste Programmiersprache der Welt.