11. Aug 2021
Lesedauer 9 Min.
Spezielle Formatierungen
Excel-Zellen mit Python formatieren
Die openpyxl-Bibliothek bietet zahlreiche Funktionen, um Zellbereiche einer Excel-Tabelle mit den gewünschten Formatierungen zu versehen.

Zellbereiche durch spezielle Formatierungen auszuzeichnen, ist im Zuge einer Analyse von Excel-Daten besonders sinnvoll. Auf diese Weise kann man zum Beispiel mit einfachen Mitteln deutlich machen, welche Daten besonders wichtig und welche weniger wichtig sind. Die openpyxl-Bibliothek bietet in dieser Hinsicht programmseitig praktisch die gleichen Formatierungsoptionen, die in der Excel-Oberfläche zur Verfügung stehen.Mit openpyxl können Sie die Daten in Ihrem Python-Programm also nicht nur auswerten, sondern Sie können dem Anwender die Ergebnisse sogleich in einer ansprechenden Form direkt in Excel präsentieren.
Stile definieren
Sie können im Python-Code Stile beziehungsweise Styles – das Paket, das die Funktionalität dazu bereitstellt, hat den Namen styles (openpyxl.style) – definieren, mit Eigenschaften für Font (Schriftfarbe, Schriftgröße, Schriftstil – fett, kursiv, unterstrichen, durchgestrichen –, Schriftart), Ausrichtung des Zelleninhalts, Dicke des Zellenrandes und so weiter. Bild 1 zeigt die Standardwerte für die einzelnen Eigenschaften.
Defaultwerte der openpyxl-Stileigenschaften(Bild 1)
Bild: openpyxl
Wie Sie an der import-Anweisung im Bild sehen können, sind die Standardstile in den Klassen Font, Border, Side, Alignment, PatternFill sowie Protection definiert. Wenn Sie also beispielsweise per Python-Programm mit openpyxl Text in eine Excel-Zelle schreiben, ohne einen der Standardwerte mit einem eigenen Stil zu überschreiben, dann erscheint der Text in der Excel-Zelle mit einer Schriftgröße von 11 Punkten in schwarzer Farbe und die Schriftart ist Calibri. Dies wegen der folgenden standardmäßigen Stildefinition für den Font:
<span class="hljs-attr">font</span> = Font(<span class="hljs-attr">name='Calibri',</span>
<span class="hljs-attr">size=11,</span>
<span class="hljs-attr">bold=False,</span>
<span class="hljs-attr">italic=False,</span>
<span class="hljs-attr">vertAlign=None,</span>
<span class="hljs-attr">underline='none',</span>
<span class="hljs-attr">strike=False,</span>
<span class="hljs-attr">color='FF000000')</span>
Möchten Sie zum Beispiel eine fette Schrift mit ansonsten den gleichen Font-Eigenschaften, brauchen Sie nur einen eigenen Style mit dem Attribut bold zu definieren und dieses auf True zu setzen: myfont = Font(bold=True)
Einen Style zuweisen
Um einen selbst definierten Style anzuwenden, weisen Sie ihn einem Cell-Objekt beziehungsweise der entsprechenden Eigenschaft des Cell-Objekts (hier font) zu. Der Code des folgenden Listings schreibt den Text Ein Test in fetter Schrift in die Zelle A1 des aktiven Tabellenblatts:
<span class="hljs-keyword">import</span> openpyxl
import sys
from openpyxl.styles <span class="hljs-keyword">import</span> Font, colors
# Arbeitsmappe laden:
try:
wb = openpyxl.load_workbook(<span class="hljs-string">'Dateiname.xlsx'</span>)
except OSError <span class="hljs-keyword">as</span> e:
print(<span class="hljs-string">'Error: {0}'</span>.format(e))
sys.exit()
# Eigenen Style definieren
myfont = Font(bold=<span class="hljs-literal">True</span>)
# Zugriff auf die Zelle A1 des aktiven Tabellenblatts
sheet = wb.active
cell_a1 = sheet[<span class="hljs-string">'A1'</span>]
# Den Style myfont der Zelle A1 zuweisen
cell_a1.font = myfont
cell_a1.value = <span class="hljs-string">'Ein Test'</span>
# Die Änderungen <span class="hljs-keyword">in</span> der Excel-Arbeitsmappe speichern
wb.save(<span class="hljs-string">'Dateiname.xlsx'</span>)
Um nur eine oder ein paar Zellen zu formatieren, können Sie den Style auch direkt zuweisen, ohne ihn vorher mit Namen zu definieren. In diesem Fall würde man im obigen Beispiel cell_a1.font = Font(bold = True) schreiben, wobei die Anweisung myfont = Font(bold=True) entfällt. Der Vorteil der separaten Style-Definition ist, dass ein Style sich so auf beliebig viele Zellen einfach anwenden lässt. Das ist noch dazu umso praktischer, je mehr Eigenschaften für den Stil definiert sind. Um einen selbstdefinierten Style auf einen zusammenhängenden Zellenbereich anzuwenden, durchlaufen Sie diesen zeilenweise mit einer for-Schleife und weisen in einer zweiten, inneren for-Schleife jedem Cell-Objekt den Style zu. Die Anweisungen im folgenden Listing versehen im ersten Arbeitsblatt der Arbeitsmappe Demo.xlsx den Zellenbereich von Zelle B2 bis Zelle G6 – also die Zellen, welche die Produkt-Umsatzzahlen enthalten, – mit einer hellgrauen Farbe:
<span class="hljs-keyword">import</span> openpyxl
import sys
from openpyxl.styles <span class="hljs-keyword">import</span> PatternFill
# Arbeitsmappe Demo.xlsx laden:
<span class="hljs-keyword">try</span>:
wb = openpyxl.load_workbook(<span class="hljs-string">'Demo.xlsx'</span>)
except OSError <span class="hljs-keyword">as</span> e:
<span class="hljs-built_in">print</span>(<span class="hljs-string">'Error: {0}'</span>.format(e))
sys.exit()
# Eigenen Style definieren
myfill = PatternFill(fgColor=<span class="hljs-string">'C8C8C8'</span>, bgColor=<span class="hljs-string">'C8C8C8'</span>, fill_type=<span class="hljs-string">'solid'</span>)
sheet = wb[<span class="hljs-string">'1. Halbjahr 2021'</span>]
cell_range = sheet[<span class="hljs-string">'B2:G6'</span>]
<span class="hljs-keyword">for</span> row <span class="hljs-keyword">in</span> cell_range:
<span class="hljs-keyword">for</span> cell <span class="hljs-keyword">in</span> row:
cell.fill = myfill
# Die Änderungen <span class="hljs-keyword">in</span> der Excel-Arbeitsmappe speichern
wb.save(<span class="hljs-string">'Demo.xlsx'</span>)
Die erste for-Schleife (for row in cell_range:) durchläuft den Zellenbereich von Zelle B2 bis Zelle G6 Zeile für Zeile. Innerhalb einer Zeile greift die zweite for-Schleife (for cell in row:) auf jede Zelle zu und weist ihrer fill-Eigenschaft den zuvor definierten Style myfill zu (cell.fill = myfill).
Ganze Bereiche formatieren
Mit den Attributen row_dimensions und column_dimensions des Tabellenblatt-Objekts können Sie eine komplette Zeile oder eine komplette Spalte formatieren. Dazu übergeben Sie row_dimensions die Zeilennummer und column_dimensions den Buchstaben der Spalte. Die folgenden Anweisungen setzen die Höhe von Zeile 7 und die Breite der Spalte H jeweils auf den Wert 20 (die Standardwerte in Excel für die Zeilenhöhe und für die Spaltenbreite sind 15 und 10,71):
sheet<span class="hljs-selector-class">.row_dimensions</span>[<span class="hljs-number">7</span>]<span class="hljs-selector-class">.height</span> = <span class="hljs-number">20</span>
<span class="hljs-number">s</span>heet<span class="hljs-selector-class">.column_dimensions</span>[<span class="hljs-string">'H'</span>]<span class="hljs-selector-class">.width</span> = <span class="hljs-number">20</span>
Im Übrigen können Sie row_dimensions und column_dimensions in gleicher Weise wie anderen Zellenobjekten einen vorher definierten Style zuweisen:
center_alignment = Alignment(horizontal=<span class="hljs-string">'center'</span>, vertical=<span class="hljs-string">'center'</span>)
sheet<span class="hljs-selector-class">.row_dimensions</span>[<span class="hljs-number">1</span>]<span class="hljs-selector-class">.alignment</span> = center_alignment
sheet<span class="hljs-selector-class">.column_dimensions</span>[<span class="hljs-string">'A'</span>]<span class="hljs-selector-class">.alignment</span> =
center_alignment
Der obige Code zentriert Zelleninhalte der Zeile 1 und der Spalte A. Allerdings greift die Formatänderung zuverlässig nur bei Zellen, die noch leer sind und an denen auch noch keine speziellen Formatierungen vorgenommen wurden. Diese Einschränkung bezüglich row_dimensions und column_dimensions gilt leider für alle Formatierungsoptionen. Wenden Sie row_dimensions und column_dimensions daher am besten nur auf noch unberührte Zeilen und Spalten an.
openpyxl 3.0.7 installieren
Die aktuelle openpyxl-Version 3.0.7 installieren Sie mit dem Konsolenbefehl pip install openpyxl, oder, wie im Beitrag der Ausgabe 08/21 auf Seite 91 beschrieben, in PyCharm, indem Sie im Editor import openpyxl schreiben, dann die Maus kurz darüber halten, und dann auf Install package openpyxl klicken. Informationen zur aktuellen openpyxl-Bibliothek erhalten Sie auch unter https://pypi.org/project/openpyxl.
Ansonsten bleibt Ihnen nichts anderes übrig, als jeder Zelle, die bereits Text oder andere Inhalte enthält oder an der bereits Formatierungen vorgenommen wurden, den gewünschten Style einzeln zuzuweisen, zum Beispiel mit einer Anweisung wie sheet[‘A1‘].alignment = center_alignment, wobei center_alignment der in obigem Listing definierte Alignment-Style ist.In diesem Fall übernimmt Excel jede Formatänderung auch bei schon bearbeiteten Zellen. Im Übrigen ist das zellenweise Formatieren von ganzen Zeilen/Spalten unter Zuhilfenahme einer for-Schleife auch schnell erledigt (das Ende des bearbeiteten Bereichs eines Excel-Tabellenblatts können Sie mit den Attributen max_row und max_column des Worksheet-Objekts ermitteln).
Farben festlegen
Farben für Excel-Objekte, zum Beispiel für den Hintergrund von Zellen, können mit openpyxl auf verschiedene Art und Weise festgelegt werden. Einmal, indem man die RGB-Werte als String angibt. Mit dem Style-Parameter color=‘00FF0000‘ legen Sie zum Beispiel eine rote Schriftfarbe fest:
myfont = <span class="hljs-keyword">Font</span>(<span class="hljs-keyword">color</span>=<span class="hljs-string">"FF0000"</span>)
Oder per direkter Zuweisung an ein Cell-Objekt:
sheet = wb<span class="hljs-selector-class">.active</span>
<span class="hljs-selector-class">sheet</span>[<span class="hljs-string">'A1'</span>]<span class="hljs-selector-class">.font</span> = Font(<span class="hljs-attribute">color</span>=<span class="hljs-string">"FF0000"</span>)
Außerdem ist das Setzen von Farben über sogenannte indizierte Farben (Indexed Colours) möglich. Den verschiedenen Farben ist ein Index zugeordnet, und beim Festlegen der gewünschten Farbe geben Sie diesen in der Form indexed=<Farbnummer> an:
<span class="hljs-keyword">import</span> openpyxl
import sys
from openpyxl.styles <span class="hljs-keyword">import</span> Font
from openpyxl.styles.colors <span class="hljs-keyword">import</span> Color
# Arbeitsmappe Demo.xlsx laden:
# …
mycolor = Font(color=Color(indexed=<span class="hljs-number">2</span>))
sheet = wb[<span class="hljs-string">'1. Halbjahr 2021'</span>]
sheet[<span class="hljs-string">'A2'</span>].font = mycolor
wb.save(<span class="hljs-string">'Demo.xlsx'</span>)
Indexed Colours basieren auf dem Tupel COLOR_INDEX, das in der Klasse Color definiert ist. Bild 2 zeigt die Index-Zuordnungen zu den verschiedenen Farben.

EIne komplette Übersichtüber die zur Verfügung stehenden Indexed Colours(Bild 2)
Bild: openpyxl
Experimentierfreudige können eine Farbe beziehungsweise einen Farbton auch mit den beiden Parametern theme und tint kombinieren:
<span class="hljs-attr">mycolor</span> = Font(<span class="hljs-attr">theme=3,</span> <span class="hljs-attr">tint=0.5)</span>
Die obigen Werte für die Parameter theme und tint der Font-__init__()-Methode ergeben einen transparenten blaugrauen Farbton. Probieren Sie gegebenenfalls ein bisschen herum, wählen Sie aber für theme keinen Wert größer als 11 und für tint keinen Wert größer als 1.0.
Werte für den style-Parameter der Side-Klasse
Die Rahmendicke einer Excel-Zelle wird für die Border-Parameter left, top, right, bottom durch den Parameter style der Side-Klasse festgelegt. Die möglichen Werte sind <span class="grafik:04_Kursiv im Kasten">medium, mediumDashed, mediumDashDotDot, mediumDashDot, hair, dashDotDot, slantDashDot, thin, dashed, dashDot, thick, dotted</span> und double.
Farben für den Zellenhintergrund legen Sie mithilfe der Klasse PatternFill fest – denken Sie in diesem Fall daran, diese Klasse am Anfang der Python-Datei von openpyxl.styles zu importieren (from openpyxl.styles import PatternFill). Leider gibt es auch für die __init__()-Methode der PatternFill-Klasse keine genaue Parameterbeschreibung und die Verwendungsweise scheint sich in den verschiedenen openpyxl-Versionen immer wieder geringfügig geändert zu haben. Um eine bestimmte Hintergrundfarbe festzulegen, wählen Sie für den Parameter fgColor den gewünschten Farbwert und als fill_type den Wert ‘solid‘. Die folgende Anweisung versieht die Zelle A1 mit einem grünen Hintergrund:
sheet[<span class="hljs-string">'A1'</span>]<span class="hljs-selector-class">.fill</span> = PatternFill(fgColor=<span class="hljs-string">'00FF00'</span>,
fill_type=<span class="hljs-string">'solid'</span>)
Beachten Sie, dass alle anderen Parameter der __init__()-Methode ohne Wirkung bleiben, falls der Parameter fill_type nicht angegeben wird. Es ist also immer notwendig, diesen Parameter zu notieren. In manchen Beispielen, die im Web zu finden sind, wird zusätzlich der Parameter bgColor mit dem gleichen Farbwert wie für fgColor angegeben. Dieser scheint aber in diesem Zusammenhang auch keine Wirkung zu haben. Genauso verhält es sich mit den Parametern start_color und end_color:Die Angabe start_color=‘00FF00‘ führt zu dem gleichen Ergebnis wie die Anweisung oben, und oft sieht man zusätzlich die Angabe von end_color mit dem gleichen Farbwert. Außer dem Wert ‚solid‘ sind für fill_type noch folgende Werte möglich: gray125, mediumGray, darkGray, darkHorizontal, darkDown, darkTrellis, gray0625, lightGray, lightHorizontal, lightUp, lightTrellis, darkUp, lightDown, lightGrid, darkVertical, darkGrid und lightVertical.

Mit den entsprechenden Wertenfür den fill_type-Parameter der PatternFill-_init__()-Methode lassen sich Farbmuster für den Zellenhintergrund darstellen(Bild 3)
Saumweber
Möchten Sie Farbmuster oder eventuell Farbverläufe darstellen, dann lohnt es sich, ein bisschen mit diesen Werten herumzuprobieren, eventuell auch, indem Sie sie mit zusätzlichen Parametern, zum Beispiel start_color und end_color, kombinieren (testen Sie in diesem Fall unterschiedliche Farbwerte für die Parameter). Bild 3 zeigt den Effekt der Angabe von fill_type=‘lightGrid‘ für den Farbwert ‘0000FF‘.
Named Styles
Normalerweise lässt sich ein Stil nicht mehr verändern, nachdem er zugewiesen wurde. Das ist durchaus sinnvoll, da so – oft unbeabsichtigte – Seiteneffekte vermieden werden:
<span class="hljs-attr">myfont</span> = Font(color=<span class="hljs-string">'9933BB'</span>, bold=<span class="hljs-literal">True</span>, underline=<span class="hljs-string">'single'</span>)
sheet = wb.active
sheet[<span class="hljs-string">'A1'</span>].font = myfont
sheet[<span class="hljs-string">'A1'</span>].font.bold = <span class="hljs-literal">False</span> # Fehler
Die Fehlermeldung, die aus der letzten Anweisung des obigen Listings resultiert, lautet: AttributeError: Style objects are immutable and cannot be changed. Reassign the style with a copy. Sie gibt auch darüber Auskunft, was gegebenenfalls zu tun ist, nämlich den gewünschten Style neu zuweisen:
<span class="hljs-attr">mynewfont</span> = Font(color=<span class="hljs-string">'9933BB'</span>, bold=<span class="hljs-literal">False</span>, underline=<span class="hljs-string">'single'</span>)
sheet[<span class="hljs-string">'A1'</span>].font = mynewfont
Alternativ könnte man natürlich auch mit myfont = Font(color=‘9933BB‘, bold=False, underline=‘single‘) den alten Style überschreiben und myfont wieder zuweisen. Zu beachten ist, dass durch die Stil-Neuzuweisung nur die Zelle A1 von der Formatänderung betroffen ist. Die Formatierung anderer Zellen, denen der alte Style ebenfalls zugewiesen wurde, bleibt so, wie sie ist.Wenn bestimmte Zellen immer gleich formatiert werden sollen, dann können Sie es sich einfacher machen, indem Sie statt den gewöhnlichen Styles benannte Stile (Named Styles) verwenden. Named Styles sind mutable, lassen sich also verändern. Um einen Named Style zu erzeugen, müssen Sie zunächst die Klasse NamedStyle importieren.Dann übergeben Sie der __init__()-Methode dieser Klasse einen Namen für den Named Style. Den Bezeichner der Variablen, die das NamedStyle-Objekt speichert und über die Sie den Named Style im weiteren Code ansprechen, benennen Sie am besten genauso:
<span class="hljs-keyword">from</span> openpyxl.styles <span class="hljs-keyword">import</span> NamedStyle
my_named_style = NamedStyle(name=<span class="hljs-string">'my_named_style'</span>)
Nun können Sie für den Named Style die gewünschten Eigenschaften festlegen:
my_named_style.font = <span class="hljs-keyword">Font</span>(italic=True, underline=<span class="hljs-string">'single'</span>, <span class="hljs-keyword">color</span>=<span class="hljs-string">'551A8B'</span>)
my_named_style.alignment = Alignment(horizontal=<span class="hljs-string">'center'</span>, vertical=<span class="hljs-string">'center'</span>)
my_named_style.border = Border(left=Side(style=<span class="hljs-string">'medium'</span>, <span class="hljs-keyword">color</span>=<span class="hljs-string">"000000"</span>),
top=Side(style=<span class="hljs-string">'medium'</span>, <span class="hljs-keyword">color</span>=<span class="hljs-string">"000000"</span>),
right=Side(style=<span class="hljs-string">'medium'</span>, <span class="hljs-keyword">color</span>=<span class="hljs-string">"000000"</span>),
bottom=Side(style=<span class="hljs-string">'medium'</span>, <span class="hljs-keyword">color</span>=<span class="hljs-string">"000000"</span>))
Wie Sie sehen, können Sie unter einem Named Style mehrere Stilkategorien einfach zusammenfassen, hier zum Beispiel die Font-Eigenschaften, die Ausrichtung mit der Klasse Alignment sowie die Rahmenlinien-Eigenschaften mit der Klasse Border. Wenn Sie den Named Style später zuweisen, erhält das Cell-Objekt alle im Named Style definierten Eigenschaften gewissermaßen in einem Rutsch. Nachdem Sie den Named Style my_named_style nun komplett definiert haben, bietet es sich an, ihn mit der Methode add_named_style() bei der Arbeitsmappe zu registrieren. Dies ist zwar nicht zwingend erforderlich, da ein Named Style mit der ersten Zuweisung automatisch registriert wird, es macht den Code aber besser lesbar:
<span class="hljs-selector-tag">wb</span><span class="hljs-selector-class">.add_named_style</span>(<span class="hljs-selector-tag">my_named_style</span>)
Danach können Sie den Named Style verwenden, indem Sie einfach den Namen zuweisen. Der folgende Code weist dem Zellenbereich A2:A6 des Arbeitsblatts 1. Halbjahr 2021 der Arbeitsmappe Demo.xlsx den Named Style my_named_style zu:
sheet = wb[<span class="hljs-string">'1. Halbjahr 2021'</span>]
cell_range_a2_a6 = sheet[<span class="hljs-string">'A2:A6'</span>]
<span class="hljs-keyword">for</span> row <span class="hljs-keyword">in</span> <span class="hljs-string">cell_range_a2_a6:</span>
<span class="hljs-keyword">for</span> cell <span class="hljs-keyword">in</span> <span class="hljs-string">row:</span>
cell.style = <span class="hljs-string">'my_named_style'</span>
Das folgende Listing zeigt zur besseren Übersicht den kompletten Python-Code des Beispiels mit Kommentaren:
<span class="hljs-keyword">import</span> openpyxl
import sys
from openpyxl.styles <span class="hljs-keyword">import</span> NamedStyle, Font, Border, Side, Alignment
# Arbeitsmappe Demo.xlsx laden:
<span class="hljs-keyword">try</span>:
wb = openpyxl.load_workbook(<span class="hljs-string">'Demo.xlsx'</span>)
except OSError as e:
<span class="hljs-built_in">print</span>(<span class="hljs-string">'Error: {0}'</span>.format(e))
sys.<span class="hljs-built_in">exit</span>()
# Named Style definieren
my_named_style = NamedStyle(name=<span class="hljs-string">'my_named_style'</span>)
my_named_style.font = Font(italic=True, underline=<span class="hljs-string">'single'</span>, <span class="hljs-built_in">color</span>=<span class="hljs-string">'551A8B'</span>, <span class="hljs-built_in">size</span>=<span class="hljs-number">14</span>)
my_named_style.alignment = Alignment(horizontal=<span class="hljs-string">'center'</span>, vertical=<span class="hljs-string">'center'</span>)
my_named_style.border = Border(left=Side(style=<span class="hljs-string">'medium'</span>, <span class="hljs-built_in">color</span>=<span class="hljs-string">"000000"</span>),
top=Side(style=<span class="hljs-string">'medium'</span>, <span class="hljs-built_in">color</span>=<span class="hljs-string">"000000"</span>),
right=Side(style=<span class="hljs-string">'medium'</span>, <span class="hljs-built_in">color</span>=<span class="hljs-string">"000000"</span>),
bottom=Side(style=<span class="hljs-string">'medium'</span>, <span class="hljs-built_in">color</span>=<span class="hljs-string">"000000"</span>))
# Named Style bei der Arbeitsmappe registrieren
wb.add_named_style(my_named_style)
# Named Style dem Zellenbereich A2:A6 zuweisen
sheet = wb[<span class="hljs-string">'1. Halbjahr 2021'</span>]
cell_range_a2_a6 = sheet[<span class="hljs-string">'A2:A6'</span>]
<span class="hljs-keyword">for</span> row in cell_range_a2_a6:
<span class="hljs-keyword">for</span> cell in row:
cell.style = <span class="hljs-string">'my_named_style'</span>
# Die Änderungen in der Excel-Arbeitsmappe speichern
wb.<span class="hljs-built_in">save</span>(<span class="hljs-string">'Demo.xlsx'</span>)
Beachten Sie, dass ein Named Style für eine Arbeitsmappe nur einmal ausgeführt werden kann; beim zweiten Mal erscheint die Meldung ValueError: Style <Name des Named Styles> exists already. Ersetzen Sie am besten die Excel-Datei Demo.xlsx im Ordner, wenn Sie das Programm wiederholt testen.
Zellen verbinden
Zum Abschluss noch die Umsetzung einer Aufgabe, die man in aufwendigeren Excel-Arbeitsblättern verhältnismäßig oft durchführen muss, nämlich das Verbinden von Zellen. Auch das ist per Python ohne Weiteres möglich. Einen zusammenhängenden Bereich von Zellen können Sie im Python-Code mit der Methode merge_cells() verbinden. Der folgende Code verbindet die Zellen A7 bis G7 des Tabellenblatts 1. Halbjahr 2021 der Arbeitsmappe Demo.xlsx:
<span class="hljs-attr">sheet</span> = wb[<span class="hljs-string">'1. Halbjahr 2021'</span>]
sheet.merge_cells(<span class="hljs-string">'A7:G7'</span>)
sheet[<span class="hljs-string">'A7'</span>] = <span class="hljs-string">'Sieben verbundene Zellen'</span>
Beachten Sie in diesem Zusammenhang, dass Text, der in den zu verbindenden Zellen steht, mit Ausführung der Methode merge_cells() verloren geht. Lesen Sie den Text gegebenenfalls vorher aus und schreiben Sie ihn anschließend wieder in die Zellen. Geben Sie dabei als Ziel, wie in obigem Listing, einfach die erste Zelle des verbundenen Bereichs an. Der zu verbindende Bereich braucht sich im Übrigen nicht auf eine Zeile zu beschränken.

Auch das Verbindenvon Excel-Zellen per Python ist mit openpyxl problemlos möglich(Bild 4)
Saumweber
Ein merge_cells()-Aufruf wie zum Beispiel sheet.merge_cells(‚A7:G9‘) zeigt ebenfalls das gewünschte Ergebnis und verbindet die Zellen von A7 bis G9 (in Bild 4 sehen Sie das Ergebnis dieses Aufrufs – der ja 21 Zellen miteinander verbindet – sowie auch das Ergebnis des Beispiels aus dem vorherigen Abschnitt, die Named-Style-Formatierungen der Zellen A2 bis A6).