2017-12-08 1 views
0

Ich möchte einige Tabellen aus einem Dokument basierend auf dem Inhalt der oberen linken Zelle entfernen.Python docx Tabelle aus Dokument löschen

Ich habe versucht:

allTables = document.tables 
for activeTable in allTables: 
    if activeTable.cell(0,0).paragraphs[0].text == 'some text': 
     allTables.remove(activeTable) 

ich alle Tabellen mit 'etwas Text' in der Zelle (0,0) entfernt erwartet haben, aber sie sind immer noch in dem Dokument.

Der Prozess tritt in die Zeile mit "allTables.remove (activeTable)" wie erwartet: indexToDelete = allTables.index(activeTable) innerhalb der if-Anweisung gibt die Tabellen, die ich suche.

Die Botschaft ist „Prozess mit Exit-Code 0 beendet“

Antwort

0

Es klingt wie Ihr Test if activeTable...text == 'some text' nicht für eine der Tabellen Erfolg. In diesem Fall wird der Aufruf .remove() nie ausgeführt, aber das Skript gibt immer noch einen Beendigungscode von 0 zurück (Erfolg).

Beginnen Sie mit Ihrem Test Validierung, vielleicht so etwas wie:

for table in document.tables: 
    print("'%s'" % table.cell(0, 0).paragraphs[0].text) 

und stellen Sie sicher, dass der Absatztext ist das, was Sie denken, es ist. Dies sollte so etwas wie ausdrucken:

'some text but also some other text' 
... 

Sobald Sie das entschlossen haben, können Sie auf etwas anderes als die gesamte Zeichenfolge testen wollen, vielleicht .startswith() mit:

text = table.cell(0, 0).paragraphs[0].text 
if text.startswith('some text'): 
    print('found one') 

Sobald Sie, dass Sie mit der Arbeit kann zum nächsten Problem weitergehen.

+0

Dies ist nicht das Problem. Der Code 'für activeTable in allTables: wenn activeTable.cell (0,0) .Abschreibungen [0] .text == 'irgendein Text': indexOfTableToDelete = allTables.index (activeTable) drucken (" Table to delete: " , 1+ indexOfTableToDelete) del allTables [indexOfTableToDelete] ' – Bartli

+0

Entschuldigung. Mein Kommentar wurde gesendet, bevor es fertig war. Der Code 'für activeTable in allTables: wenn activeTable.cell (0,0) .Abschreibungen [0] .text == 'irgendein Text': indexOfTableToDelete = allTables.index (activeTable) drucken (" Table to delete: " , 1+ indexOfTableToDelete) del allTables [indexOfTableToDelete] 'druckt: Tabelle zu löschen: 3 Tabelle zu löschen: 8 Tabelle zu löschen: 10 Das sind die Tabellen, die ich suche. – Bartli

+0

Ah, okay. Ich sehe, was jetzt passiert. Sie entfernen die Tabelle aus der Liste, die 'document.tables' zurückgibt (' allTables'), aber die Tabelle nicht aus der zugrunde liegenden XML-Datei entfernt. Versuchen Sie 'activeTable._element.getparent(). Remove (activeTable._element)' stattdessen. – scanny

0

Die Lösung lautet:

allTables = document.tables 

for activeTable in allTables: 
    if activeTable.cell(0,0).paragraphs[0].text == 'some text': 
     activeTable._element.getparent().remove(activeTable._element) 

Dank scännig.

Verwandte Themen