如何使用C#向MS Word添加带格式的字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用C#向MS Word添加带格式的字段相关的知识,希望对你有一定的参考价值。

我有一个word文档,其中包含一个自定义属性(“MyCustomProperty”)。我想使用C#插入带有格式和突出显示的DOCPROPERTY字段。这是我试过的......

var myCustomProperty = "MyCustomProperty";
foreach (Microsoft.Office.Interop.Word.Section section in Document.Sections)
{
    var headerRange = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
    foreach(Word.Field field in headerRange.Fields)
    {
        if(field.Type == Word.WdFieldType.wdFieldDocProperty
         && field.Code.Text.Contains(myCustomProperty))
        {
            //already has the header
            return;
        }
    }
    headerRange.Collapse(Word.WdCollapseDirection.wdCollapseStart);
    var f = (Word.Field)headerRange.Fields.Add(headerRange,
                           Word.WdFieldType.wdFieldDocProperty,
                           myCustomProperty,
                           true);

    f.Code.Font.Name = this.FontName;
    f.Code.Font.Size = this.FontSize;
    f.Code.Font.Bold = (int)this.IsBold;
    f.Code.Font.Italic = (int)this.IsItalic;
    f.Code.HighlightColorIndex = Word.WdColorIndex.wdYellow;
    f.Update();
    f.Code.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
    f.Code.InsertParagraphAfter();
}

当我运行此代码时,该字段将添加到标头并且是右对齐的。但字体,大小和重量都是默认值(Calibri(正文),11,不是粗体,不是斜体)。文本未突出显示。

我想要的是,我已经配置了字体,大小和重量,在一条线上添加,右对齐的字段。

我究竟做错了什么?

答案

用对象模型编写Word文档对我来说不是很直观。以下是我为解决问题所做的工作......

Word.Section section = Document.Sections[1];

var headerRange = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
foreach(Word.Field field in headerRange.Fields)
{
    if(field.Type == Word.WdFieldType.wdFieldDocProperty
      && field.Code.Text.Contains(myCustomProperty))
    {
        //already has the header
        return;
    }
}

headerRange.Collapse(Word.WdCollapseDirection.wdCollapseStart);
headerRange.InsertParagraphBefore();
headerRange = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
headerRange.Collapse(Word.WdCollapseDirection.wdCollapseStart);
headerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;

headerRange.Font.Name = this.FontName;
headerRange.Font.Size = this.FontSize;
headerRange.Font.Bold = (int)this.IsBold;
headerRange.Font.Italic = (int)this.IsItalic;
headerRange.HighlightColorIndex = Word.WdColorIndex.wdYellow;

var f = (Word.Field)headerRange.Fields.Add(headerRange,
                        Word.WdFieldType.wdFieldDocProperty,
                        myCustomProperty,
                        true);

如果你有更好的建议,我会全力以赴。

另一答案

我有同样的问题,你的答案是正确的,但另一种解决方案是在添加字段后设置属性,但是在原始范围上(或者只是再次获取引用)

Word.Table fTable = footerRange.Tables.Add(footerRange, 1, 3);
cellRange = fTable.Cell(1, 3).Range;
cellRange.Collapse(Word.WdCollapseDirection.wdCollapseStart);
cellRange.Fields.Add(cellRange, Word.WdFieldType.wdFieldDate);

// this is the important part, set the fontName again on the original Range (don't use cellRange)
fTable.Cell(1, 3).Range.Font.Name = FontName;

以上是关于如何使用C#向MS Word添加带格式的字段的主要内容,如果未能解决你的问题,请参考以下文章

添加带文本的简单表到屏幕

UITableViewCell如何添加带圆角的实心边框

JabRef中添加带中文的field时出现问题之解决

如何添加带文本编辑器的html文本框

libiptc:添加带目标IP的DNAT规则

动态添加带剪切路径的SVG