Разделить редакцию слова на редакции без изменения примененных стилей абзаца - PullRequest
0 голосов
/ 01 февраля 2019

Есть ли прямой способ, которым мы можем разделить ревизию слова на набор ревизий?

Если не может, В этом случае ниже, enter image description here Это относится к моя другая проблема .

В документе есть несколько абзацев, каждый из которых имеет свой собственный примененный стиль.Когда возьмите вставленную ревизию в приведенном выше примере, я хочу разделить ревизию на вставленные конечные метки абзаца, так как тогда она будет разделена на три ревизии.И решение должно быть глобальным решением, которое может применяться для любой вставки, независимо от того, что делает пользователь.Например:

  • Вставка может содержать любое количество конечных меток абзаца внутри.
  • Вставка может начинаться с конечного знака абзаца
  • К абзацам применяются отдельные стили абзаца, и мы должны оставить их без изменений.

Это код, который я изменилЯ попытался отделить первый абзац и другие абзацы.Но я застрял в логической части.

Private Function RemoveParagraphEndingsFromRevisions(ByRef WordRange As Word.Range)
On Error GoTo ErrorHandler

Dim fTrackRevisions As Boolean
Dim objRevision As Word.Revision
Dim objRange1, objRange2 As Word.Range
Dim sPara, firstParaStyle As String
Dim stylesCollection As VBA.Collection
Dim count As Long

Set stylesCollection = New VBA.Collection
sPara = vbCr
With WordRange.Document
    fTrackRevisions = .TrackRevisions
    .TrackRevisions = False
End With

For Each objRevision In WordRange.Document.Revisions
    'AllowTrackChangesForInsertion method checks whether the revision contains a text change
    If AllowTrackChangesForInsertion(objRevision) = True Then
        'If there are paragraph ending marks within the revision
        If InStr(objRevision.Range.Text, sPara) > 0 Then
            Set objRange1 = objRevision.Range.Duplicate
            Set objRange2 = objRange1.Duplicate

            firstParaStyle = objRange2.Paragraphs(1).Style

            If (objRange1.Paragraphs.count > 1) Then
                count = 2
                Do While (count < objRange1.Paragraphs.count + 1)
                    stylesCollection.Add objRange1.Paragraphs(count).Style
                    count = count + 1
                Loop

                .........

            Else
                'When there's no inserted text after inserted end para mark
            End If

        End If
    End If
Next

ErrorHandler:
    WordRange.Document.TrackRevisions = fTrackRevisions
    Set objRevision = Nothing
    Set objRange1 = Nothing
    Set objRange2 = Nothing
    Set stylesCollection = Nothing
    Select Case Err.Number
        Case 0
        Case Else
            ShowUnexpectedError ErrorSource:="RemoveParasFromRevisions" & vbCr & Err.Source
    End Select
End Function

Может кто-нибудь, пожалуйста, помогите мне с этим.

Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

У меня есть возможность реализовать код, который разделяет ревизию на ревизии, когда в ней есть метки конца абзаца вместе с применяемыми стилями.

Любые улучшения для этого фрагмента кода действительно приветствуются.

Private Function RemoveParagraphEndingsFromRevisions(ByRef WordRange As Word.Range)
On Error GoTo ErrorHandler

Dim fTrackRevisions As Boolean
Dim objRevision As Word.Revision
Dim objRange1 As Word.Range
Dim sPara As String
Dim firstParaStyle As String
Dim objParagraph As Word.Paragraph

sPara = vbCr
With WordRange.Document
    fTrackRevisions = .TrackRevisions
    .TrackRevisions = False
End With

For Each objRevision In WordRange.Document.Revisions
    If AllowTrackChangesForInsertion(objRevision) = True Then
        'does the revision contains paragraph ending marks within it
        If InStr(objRevision.Range.Text, sPara) > 0 Then
            Set objRange1 = objRevision.Range.Duplicate

            Set objParagraph = objRange1.Paragraphs.First
            'Get the styles of the first paragraph of the revision
            firstParaStyle = objRange1.Paragraphs.First.Style

            objParagraph.Range.Collapse wdCollapseEnd
            'Insert another paragraph as "buffer"
            objParagraph.Range.InsertAfter sPara
            'Ensure the first paragraph has its original style
            objRange1.Paragraphs.First.Style = firstParaStyle
            'Delete the "buffer" paragraph
            objParagraph.Range.MoveStart wdCharacter, 1
            objParagraph.Range.Characters.Last.Delete

        End If
    End If
Next

ErrorHandler:

    WordRange.Document.TrackRevisions = fTrackRevisions
    Set objRevision = Nothing
    Set objRange1 = Nothing
    Set objParagraph = Nothing
    Select Case Err.Number
        Case 0
        Case Else
            ShowUnexpectedError ErrorSource:="RemoveParasFromRevisions" & vbCr & Err.Source
    End Select
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...