VB.Net Word Mutillevel列表

时间:2018-03-29 13:04:06

标签: vb.net ms-word

我正在以编程方式更改某些样式并添加多级编号以实现“标​​题,子标题......等”结构体。一切正常,风格正确,编号通过各个层次。

当样式单独使用时,它们排列在我想要的位置,但是当使用编号代码时,从某处放入1.52cm的缩进并覆盖样式的缩进代码。

样式代码在编号代码之后运行,因此应覆盖我遗漏的任何默认值。

如果有人可以帮忙,我的代码如下。

Private Sub doSReport()

    Dim application As Word.Application = Globals.ThisAddIn.Application
    Dim numberlist = application.ListGalleries(WdListGalleryType.wdOutlineNumberGallery).ListTemplates(1)

    With numberlist
        .Name = ""
        With .ListLevels(1)
            .NumberFormat = "%1."
            .NumberStyle = WdListNumberStyle.wdListNumberStyleArabic
            .NumberPosition = 0
            .TextPosition = 21
            .TabPosition = 21
            .ResetOnHigher = 0
            .StartAt = 1
            .LinkedStyle = "Heading 1"
        End With

        With .ListLevels(2)
            .NumberFormat = "%1.%2."
            .NumberStyle = WdListNumberStyle.wdListNumberStyleArabic
            .NumberPosition = 0
            .TextPosition = 29
            .TabPosition = 29
            .ResetOnHigher = 1
            .StartAt = 1
            .LinkedStyle =  "Heading 2"
        End With

        With .ListLevels(3)
            .NumberFormat = "%1.%2.%3"
            .NumberStyle = WdListNumberStyle.wdListNumberStyleArabic
            .NumberPosition = 0
            .TextPosition = 36
            .TabPosition = 36
            .ResetOnHigher = 2
            .StartAt = 1
            .LinkedStyle =  "Heading 3"
        End With
    End With

    With Doc.Styles(Word.WdBuiltinStyle.wdStyleHeading1)
        .NameLocal = "Chapter Title"
        .Font.Bold = True
        .Font.Size = 16
        .Font.Name = "Calibri"
        .Font.Color = WdColor.wdColorDarkYellow 'RGB(36, 95, 144)
        .LinkStyle = True
        .QuickStyle = True
        .Visibility = False
        .Priority = 3
        .ParagraphFormat.LeftIndent = 0
        .ParagraphFormat.FirstLineIndent = 21.54
        .ParagraphFormat.SpaceBefore = 12
        .ParagraphFormat.SpaceAfter = 6
        .ParagraphFormat.PageBreakBefore = True
        .LinkToListTemplate(numberlist, 1)
    End With

    With Doc.Styles(Word.WdBuiltinStyle.wdStyleHeading2)
        .NameLocal = "Chapter Subheading"
        .Font.Bold = True
        .Font.Size = 11
        .Font.Name = "Calibri"
        .Font.Color = RGB(36, 95, 144)
        .LinkStyle = True
        .QuickStyle = True
        .Visibility = False
        .Priority = 4
        .ParagraphFormat.LeftIndent = 0
        .ParagraphFormat.FirstLineIndent = -29
        .LinkToListTemplate(numberlist, 2)
    End With

    With Doc.Styles(Word.WdBuiltinStyle.wdStyleHeading3)
        .Font.Bold = True
        .Font.Italic = True
        .Font.Size = 11
        .Font.Name = "Calibri"
        .Font.Color = RGB(36, 95, 144)
        .LinkStyle = True
        .QuickStyle = True
        .Visibility = False
        .Priority = 5
        .ParagraphFormat.LeftIndent = 0
        .ParagraphFormat.FirstLineIndent = -36
        .LinkToListTemplate(numberlist, 3)
    End With

1 个答案:

答案 0 :(得分:1)

编号样式缩进会覆盖paragaph样式缩进 - 总是,无论它应用的顺序如何。因此,您需要使用ListTemplate中指定的缩进。

与设置编号的对话框一样,有三个设置可确定数字和文本的位置:NumberPositionTabPositionTextPosition。您可以在对象模型帮助中阅读更多内容,并与对话框中的设置进行比较。

请记住,Word会在Points中计算这些(以及许多其他)设置。当然,我们以厘米(或英寸)为单位思考。 Word通过提供转换功能(例如CentimetersToPoint(反之,以及InchesToPoints和反向)使我们更容易。请注意,这些只能在项目引用Word COM库时使用("早期绑定")。

Sub ListTemplatePlusHeadingIndents()
    Dim doc As word.Document = ActiveDocument
    Dim lt As word.ListTemplate = doc.ListTemplates.Add(True, "LT_Test")
    Dim sH1 As word.style = doc.styles(wdStyleHeading1)
    Dim sH2 As word.style= doc.styles(wdStyleHeading2)
    Dim indentLvlBase as Double = 0
    Dim indentLvl1 as Double = Word.CentimetersToPoints(0.7)
    Dim indentLvl2 as Double = 2 * indentLvl1

    With lt.ListLevels(1)
        .LinkedStyle = sH1
        .NumberPosition = indentLvlBase
        .TabPosition = indentLvl1 
        .TextPosition = indentLvl1
    End With
    With lt.ListLevels(2)
        .LinkedStyle = sH2
        .NumberPosition = indentLvl1
        .TabPosition = indentLvl2 
        .TextPosition = indentLvl2 
    End With        
End Sub