Мне нужно найти диапазон слова документа, начиная с определенного текста и заканчивая конкретным текстом, затем я хочу отредактировать этот диапазон в определенном формате.
Например, в моем коде у меня есть таблица в документе, заголовок которой начинается с текста {TN}, а таблица заканчивается скрытым текстом {OAEndontribution}. Я хочу заменить текст {TN} на номер таблицы, и когда он находит текст {OAEndontribution}, он должен увеличивать номер таблицы, когда находит следующий {TN}, и это должно продолжаться.
В настоящее время я использую объект Word.Range для этого.
Но с помощью кода, который я использую, заголовок первой таблицы переносится на следующую страницу, а также отображаемый номер таблицы неверен.
Не могли бы вы помочь мне с этим?
''' <summary>
''' Format any table heading fields.
''' </summary>
''' <param name="document">PRADocument to work with</param>
Private Shared Sub SetTableFields(document As PRADocument)
Dim tableNameSearchRange As Word.Range = document.WordDocument.Content
With tableNameSearchRange
.TextRetrievalMode.IncludeHiddenText = False
.TextRetrievalMode.IncludeFieldCodes = False
.Find.Text = "\{TN*\}?"
.Find.MatchWildcards = True
.Find.Forward = True
.Find.Wrap = Word.WdFindWrap.wdFindStop
End With
Dim endOfContributionSearchRange As Word.Range = document.WordDocument.Content
With endOfContributionSearchRange
.TextRetrievalMode.IncludeHiddenText = True
.TextRetrievalMode.IncludeFieldCodes = True
.Find.Text = Constants.OA_END_CONTRIBUTION
.Find.MatchWildcards = True
.Find.Forward = True
.Find.Wrap = Word.WdFindWrap.wdFindStop
End With
Dim isContinuation As Boolean = False
Dim endOfContributionPosition As Long = 0
Do
' Find the table name field
tableNameSearchRange.Find.Execute()
If Not tableNameSearchRange.Find.Found Then Exit Do
' Determine if this is continuation of a contribution or the first page of the contribution
If endOfContributionPosition = 0 OrElse tableNameSearchRange.Start > endOfContributionPosition Then
isContinuation = False
endOfContributionSearchRange.Find.Execute()
If endOfContributionSearchRange.Find.Found Then
endOfContributionPosition = endOfContributionSearchRange.End
End If
Else
isContinuation = True
End If
Dim pg As New OAPage
pg.CreateFrom(tableNameSearchRange)
Dim hasSpace As Boolean = (Right(tableNameSearchRange.Text, 1) = " ")
If Not isContinuation Then
Dim titleFontName As String = String.Empty
Dim titleFontSize As Single
' Find the font on the paragraph marker so we can set the entire heading later
With tableNameSearchRange.Duplicate
.Expand(Word.WdUnits.wdParagraph)
.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
.MoveStart(Word.WdUnits.wdCharacter, -1)
titleFontName = .Font.Name
titleFontSize = .Font.Size
End With
Dim tableName As String = If(pg.Kind = InsertionItemType.Appendix, INSERT_TYPE_APPENDIX, If(pg.Kind = InsertionItemType.Figure, INSERT_TYPE_FIGURE, INSERT_TYPE_TABLE))
tableNameSearchRange.Text = tableName & " . " & If(hasSpace, String.Empty, " ")
document.InsertTableOfContentField(tableNameSearchRange, tableName)
Else
' Subsequent pages put in a cross reference
tableNameSearchRange.Expand(Word.WdUnits.wdParagraph)
tableNameSearchRange.MoveEnd(Word.WdUnits.wdCharacter, -1)
tableNameSearchRange.Delete()
tableNameSearchRange.Text = String.Format(" {0}", Resources.AddInStrings.HeaderContinued)
' Put in a style reference
tableNameSearchRange.Collapse(Word.WdCollapseDirection.wdCollapseStart)
document.WordDocument.Fields.Add(tableNameSearchRange, Word.WdFieldType.wdFieldStyleRef, String.Format("""{0}""", Constants.ITEM_FOR_TOC), True)
End If
tableNameSearchRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
tableNameSearchRange.End = document.WordDocument.Content.End
Loop
End Sub