Как получить диапазон первого абзаца на каждой странице в документе Word, используя C# Word Interlop - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть файл слов с 9 страницами.

Я использую это:

Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document wordDoc = wordApp.Documents.Open(file);
Microsoft.Office.Interop.Word.Range docRange = wordDoc.Range();

Но этот код даст мне диапазон всего абзаца.

Как чтобы получить диапазон текста в первой строке (или первом абзаце) каждой страницы, используя C# Word Interlop?

Извините за мой engli sh ...

Ex : На первой странице я хочу получить текст:

" Apple In c. Американская многонациональная технологическая компания со штаб-квартирой в Купертино, штат Калифорния, "

или первый абзац

" Apple In c. Американская многонациональная технологическая компания со штаб-квартирой в Купертино, штат Калифорния, которая проектирует, разрабатывает и продает потребителю электроника, компьютерное программное обеспечение и онлайн-сервисы. Она считается одной из технологических компаний Большой Четверки, наряду с Amazon, Google и Microsoft."

enter image description here

Вторая страница:

Текст, который я хочу:

Яблоко было в апреле 1976 года Стив Джобс, Стив Возняк и Рональд Уэйн разработали и продали

или

Apple была основана Стивом Джобсом, Стивом Возняком, и Рональда Уэйна в апреле 1976 года для разработки и продажи персонального компьютера Возняка Apple I, хотя Уэйн продал свою долю обратно в течение 12 дней.

enter image description here

1 Ответ

1 голос
/ 24 апреля 2020

Вы можете попробовать перебрать все абзацы и получить номер страницы. Затем выберите первый абзац страницы.

using Word = Microsoft.Office.Interop.Word;

private void FindFirstParagraphOfEachPage()
{
    Word.Application wordApp = new Word.Application();
    Word.Document wordDoc = wordApp.Documents.Open(filePath);
    Word.Range docRange = wordDoc.Range();

    var paragraphs = new List<Paragraph>();

    foreach (Word.Paragraph p in wordDoc.Paragraphs)
    {
        paragraphs.Add(new Paragraph()
        {
            PageNumber = (int)p.Range.get_Information(Word.WdInformation.wdActiveEndPageNumber),
            ParagraphText = p.Range.Text.ToString()
        });
    }
    var result = paragraphs.Where(x => !string.IsNullOrWhiteSpace(x.ParagraphText))
                        .GroupBy(x => x.PageNumber)
                        .Select(x => x.First());

    wordDoc.Close();
    wordApp.NormalTemplate.Saved = true;
    wordApp.Quit();
}

Вспомогательный класс для хранения номера страницы и текста абзаца.

class Paragraph
{
    public int PageNumber { get; set; }
    public string ParagraphText { get; set; }
}

Я не уверен насчет освобождения объектов. Это, вероятно, потребует некоторых правок и тестирования.

...