Ersetzen-Feld im Header&Fußzeile in Word Mit Interop
Wie ersetzen "- FELD" in der Kopfzeile/Fußzeile?
Ex: Word-doc-Datei mit dem Datei-Namen & Datum. statt der Datei-Pfad - [FilePath] statt C://Documents/Location/Filename.doc ,[Datum] statt 18/07/2013.
Kann ich ersetzen text mit range.
foreach (Microsoft.Office.Interop.Word.Section section in wordDocument.Sections)
{
section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text.Replace(sourceDocPath, "[File Path]");
section.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text.Replace(sourceDocPath, "[File Path]");
}
Dies funktioniert gut für Den Dateinamen, jedoch für das Datum, es ist nicht möglich zu erraten, um das format zu ersetzen. Das ist alles, weil ich bin nicht in der Lage zu fangen die genauen Feld-info ersetzen.
Den code unten auch kann ich nicht verwenden
wordApp.Selection.Find.Execute(ref textToReplace, ref typeMissing,
ref typeMissing, ref typeMissing, ref typeMissing, ref typeMissing,
ref typeMissing, ref typeMissing, ref typeMissing, ref typeMissing,
ref replaceTextWith, ref replaceAll, ref typeMissing, ref typeMissing,
ref typeMissing, ref typeMissing);
Einzige Möglichkeit, die ich sehe, wie der jetzt ist, behandeln alle möglichen Datumsformate und ersetzen,aber das scheint nicht wie ein guter Ansatz für mich.
Update als pro den Kommentar gegeben mit Storyrange.
Nicht geben Sie mir die genauen Feld-Informationen Aussage [DATUM].Wenn ich Durchlaufen story-Reihe die Art info, die ich bekommen hab wdstorytype, die über den Abschnitt Informationen, nt über das Feld Informationen.
foreach (Microsoft.Office.Interop.Word.Range tmpRange in wordDocument.StoryRanges)
{
string strtype = tmpRange.StoryType.ToString();
tmpRange.Find.Text = "18/07/2013";
tmpRange.Find.Replacement.Text = "";
tmpRange.Find.Replacement.ParagraphFormat.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphJustify;
tmpRange.Find.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;
object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
tmpRange.Find.Execute(ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref replaceAll,
ref missing, ref missing, ref missing, ref missing);
}
Update:
Sieht etwas, das hilft mir hier aber nicht zu funktionieren scheint. Irgendeine Idee, wie kann ich die Kraft des document-Objekts verwenden Sie die unten vor dem export.
field.ShowCodes = true;
- Dateiname mit Pfad. Ich bin mit diesem vor dem Export in XPS. Ich will nicht zu ändern, das ursprüngliche Dokument, das geöffnet wird, mit nur-Lesen.
- Es klingt so, als ob Sie ersetzen möchten, und die Felder von Ihren Ergebnissen, vielleicht selektiv. Wenn dem so ist, benötigen Sie zum Durchlaufen der Auflistung der Felder in der angegebenen StoryRange, überprüfen Sie das Feld Typ, und verwenden .Unlink auf die Felder, wo Sie wollen das Ergebnis statt (z.B., vielleicht haben Sie nicht wollen, ersetzen Sie { PAGE } von dessen Ergebnis). Ansonsten, es ist nicht klar, was Sie ersetzen möchten, und Datum Felder mit, genau.
- aktualisiert die Frage mit Ihrem Ansatz, auch kein Glück.bin ich etwas fehlt hier!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich, nachdem sich durch die schlechte Dokumentation über introp.word, hab die Lösung
Jay,
Vielleicht ein bisschen spät aber trotzdem ...
Nicht kommentieren, so Antworte ich.
Paar Dinge, die ich, obwohl kann sinnvoll sein, Sie (oder andere) eines Tages in Bezug auf die aktuelle akzeptierte Antwort.
Deine Frage zu beantworten aus dem letzten Update, die Sie verwenden können, so etwas wie dies, schalten Sie auf Feldfunktionen und dann verwenden Sie Find, um die Suche für die Felder stuff:
So, Sie drehen würde, die AUF vor der Suche (es sei denn, auf schon) und es wieder zurück, wenn Sie fertig sind.
Die Lösung, die Sie zur Verfügung gestellt, um sich selbst wird für die meisten Szenarien ausreichen und ich etwas ähnliches für einige Zeit. Jedoch stieß ich auf ein Dokument mit 2000 Abschnitte. Und die Schleife durch diese Abschnitte wird wiederum in einer Schleife durch den gleichen header(s) immer und immer wieder. In meinem Fall die Verarbeitung des Dokuments timed out (angesichts der akzeptablen Bearbeitungszeit)
die Lösung mit StoryRanges möglicherweise ein besserer Ansatz (kombiniert mit Schalt-Feld-codes)
Einige Beispiele der Verwendung es (generic search & replace):
http://word.mvps.org/faqs/customization/ReplaceAnywhere.htm
https://wls.wwco.com/blog/2010/07/03/find-and-replace-in-word-using-c-net/
Eine Sache zu erinnern: vergessen Sie nicht zu suchen, für Dinge, die in den Formen von Angebot
Ich denke, Sie herausgefunden, wie Sie das Feld. In jedem Fall, ich bin eigentlich auf der Umwandlung von einfachen text zu einem Feld.
Einmal Finden.Execute hat etwas getroffen, wird der Bereich ausgewählt werden, und ich
TL;DR: Wenn Ihre Dokumente sind berechenbar-format und nur eine kleine Anzahl der Abschnitte und der text ist nicht in Formen, dann Mach dir keine sorgen über all das.
oDoc ist ein "MSWord".Dokument" Objekt, das die aktuelle doc-d.h.
Dann gelten loop auf "Abschnitte" der aktuellen oDoc Objekt. Basierend auf "Abschnitte" bekommen Sie Bereich der Fußzeile. Dann werden Sie in der Lage zu finden und ersetzen Sie den text in der Fußzeile.