Как добавить подчеркнутые слова в строку текста в объекте заголовка слова? - PullRequest
0 голосов
/ 04 октября 2018

Мне нужно добавить подчеркнутые заголовки столбцов к объектам заголовка в документе.Я использую C # и Microsoft.Office.Interop.Word

Соответствующие части кода выглядят следующим образом ...

foreach (Word.HeaderFooter header in wordSection.Headers)
{
    int[] fiscalYears = RetrieveFiscalYears(docProfile);
    string paddingFY = new String(' ', 8);
    Word.Paragraph colParagraph = wordRng.Paragraphs.Add();

    int year;
    for (int i = fiscalYears.Length - 1; i >= 0; i--)
    {
        year = fiscalYears[i];
        colParagraph.Range.InsertAfter(MARKUP_WORD_TAB);
        //begin underline
        colParagraph.Range.InsertAfter(paddingFY + year.ToString() + paddingFY);
        //end underline
    }
    colParagraph.Range.InsertAfter(MARKUP_WORD_TAB);
    colParagraph = wordRng.Paragraphs.Add();
    colParagraph.set_Style(wordDoc.Styles["ColumnHeadings"]);
}

По сути, он должен выглядеть примерно так ...

 Expended          Estimated          Budgeted
   2015               2016              2017
 ---------         ----------         --------

В теле документа цикл for выглядит следующим образом:

foreach (int year in fiscalYears)
{
    wordApp.Selection.TypeText(MARKUP_WORD_TAB);
    wordApp.Selection.Font.Underline = Word.WdUnderline.wdUnderlineSingle;
    wordApp.Selection.TypeText(paddingFY + year.ToString() + paddingFY);
    wordApp.Selection.Font.Underline = Word.WdUnderline.wdUnderlineNone;
}

Но когда я использую объект выбора, он пишет в тело документа, а не вобъекты верхнего / нижнего колонтитула.Я мог бы обойти это с помощью SeekHeader и сделать его фокусом, но это создает свои собственные проблемы ... Я пытался использовать объект colParagraph.Range.Font.Underline, но это подчеркивает всю строку, а нетолько слова, которые составляют заголовки столбцов.Я пытался использовать объект поиска, но по какой-то причине команда execute не находит текст.

Благодарим вас за любые рекомендации.

1 Ответ

0 голосов
/ 09 октября 2018

Мне пришлось переместить заданный стиль над циклом for, установить новый диапазон на основе диапазона абзаца и переместить его начальную и конечную позиции.Затем примените подчеркивание к новому диапазону.Так что теперь это выглядит как ....

colParagraph.Range.InsertAfter(MARKUP_WORD_TAB);
colParagraph = wordRng.Paragraphs.Last;         //reset the range to include the tab so the style can be applied.
colParagraph.set_Style(wordDoc.Styles["ColumnHeadings"]);

int year;
int start = colParagraph.Range.Text.Length - 1;
string yrHeading = string.Empty;
Word.Range underlineRange = null;
for (int i = 0 ; i < fiscalYears.Length; i++)
{
    year = fiscalYears[i];
    colParagraph = wordRng.Paragraphs.Last;         //reset the range to include the last fiscal year that was entered.
    start = colParagraph.Range.Text.Length - 1;

    colParagraph.Range.InsertAfter(yrHeading);
    colParagraph.Range.InsertAfter(MARKUP_WORD_TAB);
    underlineRange = colParagraph.Range.Duplicate;
    underlineRange.MoveStart(Word.WdUnits.wdCharacter, start);
    underlineRange.MoveEnd(Word.WdUnits.wdCharacter, -2);           //-2 = /t/r for tab & paragraph characters
    underlineRange.Font.Underline = Word.WdUnderline.wdUnderlineSingle;
}
colParagraph = wordRng.Paragraphs.Add();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...