Word BuiltinStyles的LinkedStyle

时间:2018-04-19 09:03:47

标签: ms-word vsto

我正在扩展VSTO写Word报告的功能,以考虑不同的语言。因此,我没有使用像“标题1”等标题,而是使用了wdStyleHeading1等。我已经构建了一个函数来为标题指定样式。问题是下面的第1行和第2行是相互覆盖的。如果我先调用该函数,我会松开列表编号,如果我调用函数,我会松开格式。你能解释我哪里出错吗?

我已导入必要的参考资料。

   Call HeadingListLevel(wrdApp, 1)
    wrdApp.Selection.ParagraphFormat.Style = Word.WdBuiltinStyle.wdStyleHeading1

以下是子功能

Sub HeadingListLevel(wrdApp As Object, HeadingLvl As Integer)
    'Dim wrdHeading As String
    Dim wrdHeadingNr As String
    Dim i As Integer
    Dim ListTemp As Word.ListTemplate

    wrdHeadingNr = "%" & 1
    ListTemp = wrdApp.ListGalleries(Word.WdListGalleryType.wdOutlineNumberGallery).ListTemplates(1)

    For i = 1 To HeadingLvl
        If i > 1 Then
            wrdHeadingNr = wrdHeadingNr & "." & "%" & i
        End If
    Next i
    'wrdHeading = "Heading " & HeadingLvl
    With ListTemp.ListLevels(1)
        Select Case HeadingLvl
            Case 1
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading1 
            Case 2
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading2
            Case 3
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading3
            Case 4
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading4
            Case 5
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading5
            Case 6
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading6
            Case 7
                .LinkedStyle = Word.WdBuiltinStyle.wdStyleHeading7
        End Select
        .NumberFormat = wrdHeadingNr
        .NumberStyle = Word.WdListNumberStyle.wdListNumberStyleArabic
    End With

    wrdApp.Selection.Range.ListFormat.ApplyListTemplate(ListTemplate:=ListTemp)

    ListTemp = Nothing
End Sub

1 个答案:

答案 0 :(得分:0)

我自己发现了答案。以下是子功能的更改。它对我有用。

    Sub HeadingListLevel(wrdApp As Object, HeadingLvl As Integer)
    'Dim wrdHeading As String
    Dim wrdHeadingNr As String
    Dim i As Integer
    Dim ListTemp As Word.ListTemplate


    wrdHeadingNr = "%" & 1
    ListTemp = wrdApp.ListGalleries(Word.WdListGalleryType.wdOutlineNumberGallery).ListTemplates(5)

    For i = 1 To HeadingLvl
        If i > 1 Then
            wrdHeadingNr = wrdHeadingNr & "." & "%" & 1
        End If
    Next i
    'wrdHeading = "Heading " & HeadingLvl
    With ListTemp.ListLevels(HeadingLvl)
        Select Case HeadingLvl
            Case 1
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading1).NameLocal
            Case 2
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading2).NameLocal
            Case 3
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading3).NameLocal
            Case 4
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading4).NameLocal
            Case 5
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading5).NameLocal
            Case 6
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading6).NameLocal
            Case 7
                .LinkedStyle = wrdApp.ActiveDocument.Styles(Word.WdBuiltinStyle.wdStyleHeading7).NameLocal
        End Select

        '.LinkedStyle = wrdHeading
        .NumberFormat = wrdHeadingNr
        .NumberStyle = Word.WdListNumberStyle.wdListNumberStyleArabic
        '.StartAt = 1
        '.ResetOnHigher = False
    End With

    wrdApp.Selection.Range.ListFormat.ApplyListTemplate(ListTemplate:=ListTemp)

    ListTemp = Nothing
End Sub