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