VB.Net Word多级列表

VB.Net Word多级列表,vb.net,ms-word,Vb.net,Ms Word,我正在以编程方式更改一些样式并添加多级编号,以实现“标题、子标题…等”结构。一切正常,样式正确,编号在各个级别都有效 当样式单独使用时,它们会排列到我想要的位置,但当使用编号代码时,会从某个地方放入1.52cm的缩进,并覆盖样式的缩进代码 样式代码在编号代码之后运行,因此应该覆盖我丢失的任何默认值 如果有人能帮我的话,我的代码在下面 Private Sub doSReport() Dim application As Word.Application = Globals.ThisAdd

我正在以编程方式更改一些样式并添加多级编号,以实现“标题、子标题…等”结构。一切正常,样式正确,编号在各个级别都有效

当样式单独使用时,它们会排列到我想要的位置,但当使用编号代码时,会从某个地方放入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

编号样式缩进覆盖段落样式缩进-始终,无论应用顺序如何。因此,您需要使用ListTemplate中指定的缩进

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

请记住,Word以点数计算这些(以及许多其他)设置。当然,我们以厘米(或英寸)为单位思考。Word为我们提供了转换功能,例如
厘米停止点
(以及反向,以及
英寸停止点
和反向),从而使我们的操作变得简单。请注意,只有当项目引用了Word COM库(“早期绑定”)时,才能使用这些工具


您面临的确切问题是什么?编码的样式具有要使用的正确缩进量,这些工作正常。然后,当我添加代码以使用屏幕上的数字列表时,当我应用样式时,当我不希望缩进时,缩进1.52厘米。我可以手动调整样式以删除缩进,这样我就知道它不必缩进,但我无法确定在代码中的何处将其设置为不缩进。那么问题出在哪里?我似乎找不到引用缩进的ListTemplates或ListLevel的任何属性。存在Listlevels.TextPosition,但更改它似乎没有任何效果,也不能说明多级列表的所有3个级别都缩进了相同的数量。你知道我可以在ListTemplate对象中的什么地方设置,或者在本例中,在编号时将任何缩进归零吗?我已经尝试使用点数(21、29、36等)在代码中设置数字、制表符和文本位置,但它不起作用。然而,当我在变量中使用cm stopoints函数,然后赋值时,它就起作用了。再次感谢你的帮助辛迪@马特巴特利特是的,我看到了,但我想我还是会试试。。。我从来没有想到你会错过这么多分!我会在答题文中加上一句,因为这是一件非常有趣的事情!
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