Probleme mit der Ausrichtung von Zellen mit Python docx
Verfasst: Freitag 18. März 2022, 22:17
Hallo Python-Forum,
ich würde gerne aus einem Word-Dokument Daten extrahieren und diese Daten in einer Tabelle in einer bestimmten Anordnung ausgeben. Die Extraktion funktioniert auch ohne Probleme (mit Hilfe regulärer Ausdrücke) - mein Problem ist das spezifische Layout, dass meine Tabelle haben sollte. Ich werde es gleich noch mit Bildern und Code verdeutlichen, aber die grundlegende Idee ist die Tabelle wie folgt aufzubauen:
Tabellenkopf soll die Bezeichnungen :
Arbeitspakete , Bezeichnung und Jahr 1 - Jahr 3 beinhalten.
Die Spalten der Zeilen darunter sollten da nahtlos an die Ränder der Überschriften angrenzen mit der Besonderheit, dass die Jahre jeweils in vier Quartale pro Jahr unterteilt werden sollten.
Meine Idee war, zwei Tabellen zu benutzen, eine für die Überschriften und eine für die Daten. Leider ist das Alignment nicht korrekt und mir ist aktuell nicht klar wie ich das beheben kann.
Anbei der Code dann noch zwei Bilder - der aktuelle Zustand (Bild1) und wie es aussehen sollte (Bild2).
Bild1: Aktuelles Aussehen (Alignment passt nicht / 4 Cells pro Jahr auch nicht):
https://ibb.co/WBrBHnf
Bild2: Zieldesign:
https://ibb.co/c8HckQd
ich würde gerne aus einem Word-Dokument Daten extrahieren und diese Daten in einer Tabelle in einer bestimmten Anordnung ausgeben. Die Extraktion funktioniert auch ohne Probleme (mit Hilfe regulärer Ausdrücke) - mein Problem ist das spezifische Layout, dass meine Tabelle haben sollte. Ich werde es gleich noch mit Bildern und Code verdeutlichen, aber die grundlegende Idee ist die Tabelle wie folgt aufzubauen:
Tabellenkopf soll die Bezeichnungen :
Arbeitspakete , Bezeichnung und Jahr 1 - Jahr 3 beinhalten.
Die Spalten der Zeilen darunter sollten da nahtlos an die Ränder der Überschriften angrenzen mit der Besonderheit, dass die Jahre jeweils in vier Quartale pro Jahr unterteilt werden sollten.
Meine Idee war, zwei Tabellen zu benutzen, eine für die Überschriften und eine für die Daten. Leider ist das Alignment nicht korrekt und mir ist aktuell nicht klar wie ich das beheben kann.
Anbei der Code dann noch zwei Bilder - der aktuelle Zustand (Bild1) und wie es aussehen sollte (Bild2).
Code: Alles auswählen
import docx, docx2txt, re,os,time
from docx.shared import Inches
wp_ident =[]
wp_desc =[]
ident=''
desc=''
doc = docx.Document()
doc.add_heading('Balkenplan', 1)
text = docx2txt.process("C:/Users/korre/Documents/Tabelle.docx")
work_package=re.compile(r"(^[AP]{2}\d+\.+\d*\.*\d*.*)",re.MULTILINE)
for match in work_package.finditer(text):
t2 = time.time()
work_package = match.groups()
line = str(work_package)
ident = line.split(" ",1)[-1]
desc = line.split(" ",1)[0]
wp_ident.append(ident)
wp_desc.append(desc)
table = doc.add_table(rows=1,cols=5,style='Table Grid')
#table.allow_autofit = True
heading_cells = table.rows[0].cells
heading_cells[0].text = 'Arbeitspakete'
heading_cells[1].text = 'Beschreibung'
heading_cells[2].text = '1.Jahr'
heading_cells[3].text = '2.Jahr'
heading_cells[4].text = '3.Jahr'
table2 = doc.add_table(rows=0,cols=14,style='Table Grid')
#table2.allow_autofit = True
print("Processing...\n")
print("[1] Parsing input file and creating table...")
for item,desc in zip(wp_ident,wp_desc):
t3 = time.time()
row = table2.add_row().cells
row[1].text=str(item)
row[0].text=str(desc)
print("[2] Adjusting cell widths...\n")
t4 = time.time()
print("Summary:")
print("[1] Parsing and creating rows (" + str(len(wp_desc)) + ")" + " elapsed time: {:.2f}s)".format(t3-t2))
print("[2] Adjusting Geometry and Spacing: " + "elapsed time: {:.2f}s)".format(t4-t3))
print("total: {:.2f}s)".format(t4-t2))
doc.save('C:/Users/korre/Documents/test.docx')
os.system('start test.docx')
Bild1: Aktuelles Aussehen (Alignment passt nicht / 4 Cells pro Jahr auch nicht):
https://ibb.co/WBrBHnf
Bild2: Zieldesign:
https://ibb.co/c8HckQd