Ich habe zwei Blätter in einer Excel-Datei und die erste ist ein Deckblatt, das ich nicht bearbeiten muss. Es gibt nur wenige verbundene Zellen im Deckblatt. Aber wenn ich die Datei mit openpyxl bearbeiten nicht einmal das Deckblatt berühren, verliere ich Grenzen aus den verbundenen Zellen. Gibt es eine Lösung für dieses Problem? Ich verwende Load_workbook ('Excel-Datei'), um die Excel-Datei zu laden und sie unter einem anderen Dateinamen zu speichern.Verlieren fusionierte Zellen Grenze während der Bearbeitung von Excel-Datei mit openpyxl
3
A
Antwort
2
Aktuelle Lösung ist das Patchen der Bibliotheken Code durch Einschließen dieses Snippets nach dem Einschließen der Bibliothek, es behebt das Problem. (Hinweis: keine Sorge über fehlende Definitionen, beispielsweise COORD_RE, das heißt der Patch ist in sich abgeschlossen)
from itertools import product
import types
import openpyxl
from openpyxl import worksheet
from openpyxl.utils import range_boundaries
def patch_worksheet():
"""This monkeypatches Worksheet.merge_cells to remove cell deletion bug
https://bitbucket.org/openpyxl/openpyxl/issues/365/styling-merged-cells-isnt-working
Thank you to Sergey Pikhovkin for the fix
"""
def merge_cells(self, range_string=None, start_row=None, start_column=None, end_row=None, end_column=None):
""" Set merge on a cell range. Range is a cell range (e.g. A1:E1)
This is monkeypatched to remove cell deletion bug
https://bitbucket.org/openpyxl/openpyxl/issues/365/styling-merged-cells-isnt-working
"""
if not range_string and not all((start_row, start_column, end_row, end_column)):
msg = "You have to provide a value either for 'coordinate' or for\
'start_row', 'start_column', 'end_row' *and* 'end_column'"
raise ValueError(msg)
elif not range_string:
range_string = '%s%s:%s%s' % (get_column_letter(start_column),
start_row,
get_column_letter(end_column),
end_row)
elif ":" not in range_string:
if COORD_RE.match(range_string):
return # Single cell, do nothing
raise ValueError("Range must be a cell range (e.g. A1:E1)")
else:
range_string = range_string.replace('$', '')
if range_string not in self._merged_cells:
self._merged_cells.append(range_string)
# The following is removed by this monkeypatch:
# min_col, min_row, max_col, max_row = range_boundaries(range_string)
# rows = range(min_row, max_row+1)
# cols = range(min_col, max_col+1)
# cells = product(rows, cols)
# all but the top-left cell are removed
#for c in islice(cells, 1, None):
#if c in self._cells:
#del self._cells[c]
# Apply monkey patch
worksheet.Worksheet.merge_cells = merge_cells
patch_worksheet()
Quelle https://bitbucket.org/openpyxl/openpyxl/issues/365/styling-merged-cells-isnt-working
Verwandte Themen
- 1. Nonsequential Zellen mit Openpyxl
- 2. lesen mehrzeilige Zellen mit openpyxl
- 3. VB.net Excel fusionierte Zellen Bereich
- 4. vba finden funktioniert nicht auf fusionierte Zellen
- 5. Wie Horizontalignment Center fusionierte Zellen in EPPlus
- 6. OpenXML SDK Grenze auf fusionierte Zellen, die nur an den ersten Zelle angelegt
- 7. UITextView, während der Bearbeitung blättern?
- 8. wx.ListCtrl mit TextEditMixin - Bearbeitung ausgewählter Zellen deaktivieren
- 9. UITextField schneidet den Text während der Bearbeitung
- 10. Teil des Bildes während der Postzustellung verlieren
- 11. Classcast während Table Bearbeitung
- 12. Behandeln Sie fusionierte Zellen in Epplus Excel-Konvertierung in HTML
- 13. sailsjs live update während der serverseitigen Bearbeitung
- 14. Blockierungsfeld während der Bearbeitung. (Swift - iOS)
- 15. Git bisect mit fusionierte Commits
- 16. Nicht-serialisierbarer Objektfehler während der Bearbeitung von Memcache
- 17. Verlieren serielle Daten während der Übertragung mit hoher Baudrate
- 18. während der Bearbeitung, Validierung von Datum funktioniert nicht in ODOO
- 19. openoffice calc - newline verursacht doppelten Wert in Zellen (Pandas/openpyxl)
- 20. Python XlsxWriter gesetzt Grenze um mehrere Zellen
- 21. Blattnamen von openpyxl bekommen
- 22. Lesen von 300k Zellen in Excel mit read_only in openpyxl nicht genug
- 23. Live-Bearbeitung der Benutzereingabe
- 24. Openpyxl mit python2.7
- 25. SVN Merge fusionierte Extramaterial
- 26. openpyxl, wie man Zelltyp
- 27. fusionierte SQL-Tabellennamen
- 28. GWT TextBox - Benachrichtigung über Wertänderungen während der Bearbeitung
- 29. PhpStorm Ersticken und Einfrieren während der Bearbeitung Code
- 30. Doppelte Bearbeitung verhindern/DB-Datensätze während der Bearbeitung sperren - einzelner Backend-Server