如何在单词标题对象的一行文本中添加带下划线的单词?

时间:2018-10-04 00:38:23

标签: c# ms-word underline

我需要在文档的标题对象中添加带下划线的标题。我正在使用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对象,但是这会突出显示整行,而不仅仅是构成列标题的单词。 我尝试使用查找对象,但是由于某种原因执行未找到文本。

赞赏您可以提供的任何指导。

1 个答案:

答案 0 :(得分:0)

我必须将设置样式移至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();