2016-12-20 4 views
1

ich diesen Code bin mit einem Field setzen Inhalt in Word Interop mit:Überschreiben Feldinhalt

var wordApp = new Microsoft.Office.Interop.Word.Application(); 
var wordDoc = wordApp.Documents.Add(Path.GetFullPath("myTemplate.dotx")); 
Field f = wordDoc.Fields[0]; 
f.Select(); 
wordApp.Selection.TypeText("some text"); 

aber dies nur einmal funktioniert. Wenn ich die f.Select() Anweisung erneut ausführen, erhalte ich eine COMException Meldung, dass das Objekt verschwunden ist.

Gibt es eine Möglichkeit, Feldinhalte zu überschreiben? Oder muss ich arbeiten mit der Möglichkeit, eine Field nur einmal zu schreiben?

+0

Es ist unklar, was meinen Sie, wenn Sie sagen, dass der Code nur einmal funktioniert. –

+0

@RossBush Ich versuchte zu klären: Wenn ich den 'f.Select()' Code nach dem 'TypeText' Teil anrufe, bekomme ich eine' COMException', die mir sagt, dass das Objekt verschwunden ist. –

+0

Was ist der Rückgabetyp von f.Select()? und Felder? Es könnte möglich sein, dass es Enumerable ist und Sie können nur eine davon durchlaufen. Lösung ist, es in Liste zu speichern und dann mit dieser Liste zu arbeiten;) – xszaboj

Antwort

2

Wenn Sie das Feld auswählen und dann TypeText verwenden, wird das gesamte Feld durch den eingegebenen Text ersetzt. Stattdessen sollten Sie Field.Result Eigenschaft werden:

f.Result.Text = "some text"; 

Daher Code etwa wie folgt sein sollte:

var wordApp = new Microsoft.Office.Interop.Word.Application(); 
var wordDoc = wordApp.Documents.Add(Path.GetFullPath("myTemplate.dotx")); 
wordDoc.Fields[1].Result.Text = "some text"; // AFAIK, `Fields` collection is one-based. 

// Do whatever other modifications you want, then save and close the document. 

Hoffnung, das hilft :)