You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用NPOI生成Word时自定义编号样式与段落XWPFRun样式不一致如何解决

解决方案

你遇到的编号样式和段落Run不一致的根本原因是:Word 中列表编号的格式是独立在编号定义的层级配置中维护的,默认不会自动继承段落内Run的样式,需要你在定义CT_Lvl时主动指定编号的字符样式。

你只需要在现有每个CT_Lvl配置中,新增rPr(Run属性)节点,配置和你段落Run完全一致的样式参数即可,修改后的编号定义代码参考如下:

XWPFNumbering numbering = document.CreateNumbering();

var ct_abn = new CT_AbstractNum();
var mlt = new CT_MultiLevelType();
mlt.val = ST_MultiLevelType.multilevel;
ct_abn.multiLevelType = mlt;
ct_abn.lvl = new System.Collections.Generic.List<CT_Lvl> {
    new CT_Lvl {
        ilvl = "0", 
        start = new CT_DecimalNumber() {val = "1"}, 
        numFmt = new CT_NumFmt() {val = ST_NumberFormat.@decimal},
        lvlText = new CT_LevelText() {val = "%1."}, 
        lvlJc = new CT_Jc() {val = ST_Jc.left},
        pPr = new CT_PPr {ind = new CT_Ind {left = "360", hanging = 360}, },
        // 新增编号的Run样式配置,和你段落Run的参数保持一致
        rPr = new CT_RPr {
            // 对应Run.IsBold = true
            b = new CT_OnOff { val = true },
            // 对应Run.FontFamily = "Times New Roman",覆盖多语言字体配置避免差异
            rFonts = new CT_Fonts { 
                ascii = "Times New Roman", 
                eastAsia = "Times New Roman", 
                hAnsi = "Times New Roman",
                cs = "Times New Roman"
            },
            // 对应Run.FontSize = 12,注意单位是半磅,12号字对应值为24
            sz = new CT_HpsMeasure { val = "24" },
            szCs = new CT_HpsMeasure { val = "24" }
        }
    },
    new CT_Lvl {
        ilvl = "1", 
        start = new CT_DecimalNumber() {val = "1"}, 
        numFmt = new CT_NumFmt() {val = ST_NumberFormat.@decimal},
        lvlText = new CT_LevelText() {val = "%1.%2."}, 
        lvlJc = new CT_Jc() {val = ST_Jc.left},
        pPr = new CT_PPr {ind = new CT_Ind {left = "792", hanging = 792, firstLineSpecified = true}, },
        rPr = new CT_RPr {
            b = new CT_OnOff { val = true },
            rFonts = new CT_Fonts { ascii = "Times New Roman", eastAsia = "Times New Roman", hAnsi = "Times New Roman" },
            sz = new CT_HpsMeasure { val = "24" }
        }
    },
    new CT_Lvl {
        ilvl = "2", 
        start = new CT_DecimalNumber() {val = "1"}, 
        numFmt = new CT_NumFmt() {val = ST_NumberFormat.@decimal},
        lvlText = new CT_LevelText() {val = "%1.%2.%3."}, 
        lvlJc = new CT_Jc() {val = ST_Jc.left},
        pPr = new CT_PPr {ind = new CT_Ind {left = "792", hanging = 792}},
        rPr = new CT_RPr {
            b = new CT_OnOff { val = true },
            rFonts = new CT_Fonts { ascii = "Times New Roman", eastAsia = "Times New Roman", hAnsi = "Times New Roman" },
            sz = new CT_HpsMeasure { val = "24" }
        }
    },
}

注意事项

  • 如果不同层级的列表段落样式不一样,只需要给对应CT_Lvl的rPr配置对应样式即可
  • 字号配置的单位是半磅,所以12号字对应的val值是24,不要直接填12,否则编号字号会比段落小一半
  • 字体配置建议覆盖多语言字段,避免小语种字符字体显示异常

内容的提问来源于stack exchange,提问作者Skyglar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:45:03