Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: So 03.06.12 19:39 
Hey,

erstmal entschuldigung wenn ich das Thema in der falschen Sparte anspreche aber ich wusste nicht genau wohin damit.
Ich erstelle eine Anwendung die ein Word-Dokument öffnet und dabei den Text von vordefinierten Lesezeichen ändern soll.

Die Anwendung ist KEIN Word Add-in, d.h. ich kann den Text nicht über bookmark1.Text ändern. Statt dessen habe ich in der MSDN Doku nachgesehen und da eine Methode gefunden die das überschreiben trotz allem möglich macht (etwas von mir abgeändert):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
private static void ReplaceBookmark(_Document doc, int bookmarknumber, object text)
        {
            Bookmark bookmark = doc.Bookmarks.Cast<Bookmark>().ToArray()[bookmarknumber];

            object rng = bookmark.Range;
            string name = bookmark.Name;

            bookmark.Range.Text = text.ToString();

            doc.Bookmarks.Add(name, ref rng);
        }


So, und wenn ich jetzt das Programm Debugge erhalte ich immer die Fehlermeldung: "Der Bereich kann nicht gelöscht werden" (markierte Stelle).
Ich habe mit der Methode rumgespielt und sie auch mehrfach verändert aber ich komme einfach nicht drauf warum das Lesezeichen nicht überschrieben werden kann.

Der Text der in dem 'leeren' Lesezeichen stand war "FORMTEXT ".

Weis jemand wie ich das überschreiben hinbekomme?

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Mo 04.06.12 20:35 
Hab es nach langem rumprobieren nun doch geschafft.
Wen es interessiert:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
 private static void ReplaceBookmark(_Document doc, int bookmarknumber, object text)
        {
            FormField field = doc.FormFields.Cast<FormField>().First(b => b.Name == "Text" + (bookmarknumber + 1));
            field.TextInput.Default = text.ToString();
            doc.Fields.Update();
        }

Hatte gemerkt dass ich eigentlich FormFields nehmen muss, damit man die Einträge auch noch manuell ändern kann.

Wichtig sind hier nur die zwei letzten Zeile:
die 1. schreibt den neuen Text
die 2. aktuallisiert die Einträge (muss gemacht werden!)

Zum schluss hald noch speichern ;)

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler