получить заголовок выделенного текста в слове - PullRequest
1 голос
/ 12 мая 2010

Я работаю с Microsoft Word VBA, макросы, .net Мой вопрос: есть ли способ получить подтему и основную тему, которая предшествует выбранному основному тексту?

Вот пример:

  • Магистерская тема (уровень 1)
  • подтема 1 (уровень 2)
    • основной текст a
    • основной текст b основной текст c
  • подтема 2 (уровень 2)
    • основной текст d
    • основной текст e
  • Другие темы MISC (уровень 2) основной текст f основной текст g основной текст h

Здесь, если выбран bodytext e , я хотел бы запустить макрос, который дает текст результата
Основная тема: подтема 1 . Я пытался с range,parent ,Scope.Information(wdActiveEndSectionNumber) и т. Д., Но ничего не работает !!!

Ответы [ 2 ]

0 голосов
/ 25 июня 2010
> 'By Dhiraj Bajracharya '2010 Sub
> getHeaddingsRecursive(arange As Range)
> If MainHeading <> "" Then Exit Sub On
> Error GoTo err
>     If Subheading = "" Then
>         If arange.Paragraphs(1).OutlineLevel =
> WdOutlineLevel.wdOutlineLevel2 Then
>             Subheading = arange.Text
>             Exit Sub
>         End If
>     End If
>     If arange.Paragraphs(1).OutlineLevel =
> WdOutlineLevel.wdOutlineLevel1 Then
>          MainHeading = arange.Text
>     End If    Call getHeaddingsRecursive(arange.Previous(wdParagraph,
> 1)) err: End Sub

Эта рекурсивная функция работает, а выходные данные сохраняются в заголовках и подзаголовках.

0 голосов
/ 13 мая 2010

уровни абзаца являются частью перечисления. Все, что вам нужно сделать, это отследить, на каком уровне абзаца вы находитесь, а затем взять элементы подуровня.

    static void Main(string[] args)
    {
        Application wrd = new Application();
        Document d;
        Documents docs = wrd.Documents;
        object readOnly = true;
        object fileName = @"C:\Users\v-chrha\Desktop\text doc.docx";
        object missing = Missing.Value;
        d = docs.Open(ref fileName, ref missing, ref readOnly, ref  missing, ref  missing
            , ref  missing, ref  missing, ref  missing, ref  missing, ref  missing
            , ref  missing, ref  missing, ref  missing, ref  missing, ref  missing, ref  missing);

        int previousLevel = 0;
        int currentLevel = 0;
        foreach (Paragraph p in d.Paragraphs)
        {
            Console.WriteLine("Paragraph: {0}\nLevel: {1}", p.Range.Text, p.p.OutlineLevel.ToString());
            switch (p.OutlineLevel)
            {
                case WdOutlineLevel.wdOutlineLevel1:
                    currentLevel = 1;
                    break;
                case WdOutlineLevel.wdOutlineLevel2:
                    currentLevel = 2;
                    break;
                case WdOutlineLevel.wdOutlineLevel3:
                    currentLevel = 3;
                    break;
                case WdOutlineLevel.wdOutlineLevel4:
                    currentLevel = 4;
                    break;
                case WdOutlineLevel.wdOutlineLevel5:
                    currentLevel = 5;
                    break;
                case WdOutlineLevel.wdOutlineLevel6:
                    currentLevel = 6;
                    break;
                case WdOutlineLevel.wdOutlineLevel7:
                    currentLevel = 7;
                    break;
                case WdOutlineLevel.wdOutlineLevel8:
                    currentLevel = 8;
                    break;
                case WdOutlineLevel.wdOutlineLevel9:
                    currentLevel = 9;
                    break;
                case WdOutlineLevel.wdOutlineLevelBodyText:
                    currentLevel = 10;
                    break;
            }
            if (currentLevel > previousLevel)
                Console.WriteLine("with previous");
            else
                Console.WriteLine("not with previous");
            previousLevel = currentLevel;
        }
        Console.ReadLine();
        docs = null;
        d.Close(ref missing, ref missing, ref missing);
        d = null;
        wrd.Quit(ref missing, ref missing, ref missing);
        wrd = null;


    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...