none
C# Inhaltsverzeichnis eines Word Dokuments lesen RRS feed

  • Frage

  • Hallo Zusammen,

    ich bin gerade auf ein Problem gestoßen. Unter Word 2010 konnte ich mir einfach das Inhaltsverzeichnis auslesen und die Seitenzahlen zwischenspeichern. Das habe ich mit folgendem Code gemacht:

    public WordToc parseWordToc(Microsoft.Office.Interop.Word.Application wordApplication,
                _Document wordDoc)
            {
                WordToc wordToc = new WordToc();
                string[] tocSeparator = new string[] { "\r" };
                string[] tocEntrySeparator = new string[] { "\t" };
    
                wordApplication.Selection.Find.ClearFormatting();
                foreach (Field f in wordDoc.Fields)
                {
                    if (f.Type == WdFieldType.wdFieldTOC)
                    {
                        TableOfContents toc = wordDoc.TablesOfContents[f.Index];
                        toc.Range.Select();
                        Microsoft.Office.Interop.Word.Range r = toc.Range;
    
                        string[] entries = r.Text.Split(tocSeparator, StringSplitOptions.RemoveEmptyEntries);
    
                        foreach (var e in entries)
                        {
                            string[] entry = e.Split(tocEntrySeparator, StringSplitOptions.RemoveEmptyEntries);
                            WordTocEntry wordTocEntry = new WordTocEntry();
                            wordTocEntry.description = entry[0];
                            int pageNumber = -1;
    
                            bool successfullyParsed = int.TryParse(entry[1], out pageNumber);
    
                            if (successfullyParsed)
                            {
                                // Fehler
                            }
    
                            wordTocEntry.pagenumber = pageNumber;
                            wordToc.tocEntries.Add(wordTocEntry);
                        }
    
                        break;
                    }
                }
    
                return wordToc;
            }

    Soweit so gut. Nun wurde aber auf Office 2013 / Word 2013 umgestellt und nun funktioniert dieser Code nicht mehr, da ich zwar den Text mit Range.Text zurückbekomme, aber dieser ist ohne die Seitenzahl. Ich hab nun schon hin und her probiert, aber ich komme auf keine wirkliche Lösung.

    Hat vielleicht jemand eine Idee, an was das liegen könnte?

    Viele Grüße

    MS-Tech

    Mittwoch, 13. März 2019 16:57

Alle Antworten

  • Hi,
    ich habe Deinen Code nicht genau geprüft, aber, da Du mit Selection und Select arbeitest, interagierst Du mit der Oberfläche und mit dem Anwender. Wenn dieser etwas macht, was nicht dazu passt, dann gibt es Probleme. Stelle mal Dein Programm vollständig auf Range-Objekte um ohne Select, Selection  und Activate.

    --
    Viele Grüsse / Best Regards
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Donnerstag, 14. März 2019 09:34