2017-01-27 3 views
0

Ich habe eine Reihe von Code mit Python und Pandas, die alle groovy und Soße ist gekränkt. Aber jetzt muss ich eine Reihe von Tabellen in einem Word-Dokument auffüllen. Im Idealfall möchte ich eine Reihe von Mergefields an einen Tisch schreiben und sie dann durch Wort mit dem von Pandas ausgesandten CSV zusammenführen.Schreiben Sie Word Seriendruckfelder zu MS Word mit Python

Ich habe mit Python-docx begonnen, aber es gibt nichts in der Dokumentation zum Schreiben Mergefelder, es sei denn, ich irre mich. So etwas wie dies würde die Bienen Knees sein:

document = Document() 

document.add_heading('Does this merge thing work', 0) 

table = document.add_table(rows=1, cols=3) 
hdr_cells = table.rows[0].cells 
hdr_cells[0].text = 'Qty' 
hdr_cells[1].text = 'Id' 
hdr_cells[2].text = 'Desc' 
row_cells = table.add_row().cells 
row_cells[0].text = "MERGEFIELD yo " #doesn't work, just string. 
row_cells[1].MERGEFIELD = "Funky" #MERGEFIELD not a table object 
row_cells[2].mailMerge = "Nice"  #This type of thing would be dreamy 

Ich bin auch vertraut mit win32com, aber ich kann nicht finden Dokumentation von überall ein Datenfeld zu schreiben. Ich habe ein Makro in Wort aufgezeichnet, wenn ein mergefield Einfügen und die VBA wie folgt aussieht:

Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _ 
    "MERGEFIELD obviosulyyournotagolfer", PreserveFormatting:=True 

auch nur eine große Liste von Mergefields zu einem Dokument zu schreiben wäre eine große Hilfe sein. Jede Eingabe würde sehr geschätzt werden.

Ich habe auch mit docx-mailmerge gespielt, aber von dem, was ich sagen kann, erlaubt es nur Ihnen, Daten in bereits bestehende merge-Felder zusammenzuführen. Danke für Ihre Hilfe!

+0

Ich bin ein wenig verwirrt hier. Haben Sie ein Vorlagendokument mit Platzhaltern (z. B. Seriendruckfeldern) und müssen Sie mit CSV-Daten zusammenführen? Möchten Sie Platzhalter spontan erstellen und dann an CSV-Daten binden? Oder versuchen Sie, MS Word-Tabelle mit CSV-Daten zu füllen? – Parfait

+0

Entschuldigung, dass ich nicht zu klar bin. Ich möchte Platzhalter im Hintergrund erstellen und dann an CSV-Daten binden. Grundsätzlich erstellen Sie die Vorlage. Das Endergebnis wird eine MS Word-Tabelle mit CSV-Daten sein, aber es gibt viele Datensätze, so kann ich nicht traditionelle Methoden verwenden, um Daten in MS-Tabellen zu schreiben. –

+0

Dies fühlt sich an wie ein [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Die Seriendrucktabelle ist eine versuchte Lösung des ersten Problems, über das Sie nicht nachfragen. Was ist das Endziel dieser CSV-Daten? Einen Bericht ausfüllen? Ein Dokument senden? Verwenden Sie Excel dennoch als Medium, da Sie einen Zellbereich kopieren und in Word als Tabellen einfügen können. – Parfait

Antwort

0

Suchen Sie etwas wie python-docx-template? Es ermöglicht Ihnen, jinja2-ähnliche Vorlagen für Microsoft Word-Dokumente zu erstellen. Dies könnte das Erstellen von Tabellen oder anderen automatisch aufgefüllten Feldern beinhalten. Es erlaubt Ihnen auch Format und Stil Ihres Dokument so, wie Sie und ha

Hier ist ein Beispiel wollen:

{%tr for a in alerts %} 
{{ a.date }} {% cellbg a.bg %}{{ a.type }} {{r a.desc }} 
{%tr endfor %} 

Das ist etwas, das in dem Wort doc auftauchen würde. Es gibt andere Tabellenbeispiele wie dieses auf github.