C# Worddokument an Worddokument anhängen

Andre

The Shocker
Tach zusammen,

kurz mal ne Beschreibung was gegeben ist. Ich schreibe ein Word-Add In welches ein Worddokument öffnet und die darin enthaltenen Bookmarks mit Daten aus einer XML-Datei überschreibt ( Funktiert alles wunderbar ).
Nun möchte ich aber über C# an das Ende des schon geöffeneten und gefüllten Dokuments noch die AGB anhängen, welche in einem separaten Dokument stehen.

Könnte man das Dokument vielleicht über nen Bookmark hinzufügen ?
oder
gibt es vielleicht sowas wie bei dem StringBuilder mit "AppendLine" ? ( nur eben für Word :p )


Ich habe schon recht viel im Internet gesucht, aber nur Beiträge und Anleitungen gefunden wie man ein Dokument füllt. Das ist nicht das was ich brauche.
 

Andre

The Shocker
Es ist doch immer so, man sucht und sucht und wenn man dann jemanden fragt, findet man selbst die Antwort :D
Allerings besteht immer noch ein Problem mit der Formatierung : \

Erstmal meine Vorgehensweise:

Code:
private string getAGBtext()
{
            WordApplication.Document activeDocAGB = new WordApplication.Document();
            Dictionary<string, WordApplication.Bookmark> AgbBookmark = new Dictionary<string, WordApplication.Bookmark>();
            string AGBtext = String.Empty;
            object oMissing = System.Reflection.Missing.Value;

            string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\";

            DirectoryInfo dirInfo = new DirectoryInfo(path);

            //Sucht nach dem ausgewählten Angebot
            FileInfo[] files = dirInfo.GetFiles("Angebot_AGB.docx");

            object filename = String.Empty;

            // Wurde eine AGB-Datei gefinden ?
            if (files.Length > 0)
            {
                try
                {
                    // Öffnet das Dokument
                    foreach (FileInfo file in files)
                    {
                        filename = String.Format(@"{0}\{1}", path, file.Name);

                        //Öffnen der Datei ( aber im Hintergrund )
                        activeDocAGB = wordApp.Documents.Open(ref filename, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, false, /*Das False steht dafür dass das öffnen des Dokuments nicht angezeigt wird */
                            ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                    }
                }
                catch (Exception ex)
                {
#if DEBUG
                    MessageBox.Show(ex.ToString());
#endif
                    Logger.Log(String.Format("WorkerClass.cs getAGBTest(): FEHLERMELDUNG: {0}", ex.Message.ToString()));
                    MessageBox.Show(XMLParser.getMessage("keineAGB"));
                }
            }

            //Bookmarks aus der AGB-Datei auslesen ... es ist nur ein Bookmark für die gesamte AGB drin
            foreach (WordApplication.Bookmark mark in activeDocAGB.Bookmarks)
            {
                //Füllt hier die list mit allen Bookmarks aus dem AGB-Worddokument
                AgbBookmark.Add(mark.Name, mark);
            }

            //Gib mir den gesamten Text (Länge) des Bookmarks
            WordApplication.Range bmRange = AgbBookmark["AGB"].Range;
            
            //Schreibe die AGB in die String Variable
            AGBtext = bmRange.Text;

            //Die AGB-Datei schließen
            activeDocAGB.Close(oMissing, oMissing, oMissing);

            //Den AGB-Text an ein Bookmark zurückgeben der für die AGB in der Angebot-Worddatei steht
            return AGBtext;
        }

Nun nochmal zu meinem Problem.
Ich habe die AGB eigentlich nur aus dem eigentlichen Dokokument in ein anderes kopiert.
Die Formatierungen der beiden Dateien ( Die ausrichtung über das "Lineal" ) ist gleich, aber trotzdem übernimmt er die Formatierung nicht : \
Hat jemand diesbezüglich eine Idee ? :confused:
 

Andre

The Shocker
Guten Morgen,

nach langem überlegen und ausprobieren habe ich auch für das Problem eine Lösung gefunden.


getAGBtext()
Code:
           WordApplication.Range bmRange = AgbBookmark["AGB"].Range;

            //AGBtext = bmRange.Text;
            string xml = bmRange.WordOpenXML;  //<-------

            //if (activeDocAGB.Name == "Angebot_AGB.docx")
            //{
                activeDocAGB.Close(oMissing, oMissing, oMissing);
            //}

            return xml;

Bookmark mit AGB-XML ersetzten
setBookmark()
Code:
...

        if (name == "AGB")
        {
               wordApp.Selection.InsertXML(getAGBtext());
        }
        else
        {
               wordApp.Selection.Text = text;
        }

...


Ich nehme also die XML-Version des AGB Worddokument und ersetzte dann das Bookmark für die AGB in der Angebotsvorlage mit dem XML-Code.
 
Zuletzt bearbeitet: