Читайте верхние и нижние колонтитулы страницы из Word.Range - VSTO Word Interop C # - PullRequest
3 голосов
/ 20 июля 2010

У меня есть объект Range, и я хочу использовать его для извлечения информации со страницы, где находится Range. Информация находится в верхних и нижних колонтитулах таблицы, из которой я хочу прочитать текст стол.

Я пытался: word.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Shapes.Range(ref pageNumber).TextFrame.TextRange.Text;

Где слово - Range, а pageNumber - номер страницы, в которой находится этот диапазон. Проблема в том, что я не могу получить реальный номер страницы! использование word.get_information(WdInformation.wdActiveEndPageNumber) возвращает неверный номер страницы!

Ответы [ 2 ]

6 голосов
/ 22 июля 2010

Я нашел ответ, если любой1 заинтересован:

int i = (int)range.get_Information(WdInformation.wdActiveEndPageNumber) % 2;
WdHeaderFooterIndex index;
if (i == 0 && range.Sections[1].PageSetup.OddAndEvenPagesHeaderFooter == 1)
    index = WdHeaderFooterIndex.wdHeaderFooterEvenPages;
else
    index = WdHeaderFooterIndex.wdHeaderFooterPrimary;

Range sRange = range.Sections[1].Range;
object direction = Word.WdCollapseDirection.wdCollapseStart;
sRange.Collapse(ref direction);
if (range.get_Information(WdInformation.wdActiveEndPageNumber) == sRange.get_Information(WdInformation.wdActiveEndPageNumber)
    && range.Sections[1].PageSetup.DifferentFirstPageHeaderFooter == 1)
    index = WdHeaderFooterIndex.wdHeaderFooterFirstPage;

object rangeIndex = 1;
Range headerRange = range.Sections[1].Headers[index].Range.ShapeRange.TextFrame.TextRange;

string profession = headerRange.Tables[1].Cell(4, 1).Range.Text;
string manPower = headerRange.Tables[1].Cell(4, 2).Range.Text;
string registration = headerRange.Tables[1].Cell(4, 3).Range.Text;
string taggingListNum = headerRange.Tables[1].Cell(4, 4).Range.Text;
0 голосов
/ 28 июня 2018

читать весь текстовый документ. впоследствии я использую его для анализа и извлечения данных:

        Document doc = Globals.ThisAddIn.Application.ActiveDocument; 

        string headers = "";

        foreach (Section section in doc.Sections)
        {
            foreach (HeaderFooter hf in section.Headers)
            {
                headers += hf.Range.Text;
            }
        }

        string docText = headers + doc.Range(doc.Content.Start, doc.Content.End).Text;
...