ReplaceTextFmt2.vb
C# VB
'''' This code is part of Document Solutions for Word demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.DrawingImports System.LinqImports System.Collections.GenericImports System.Text.RegularExpressionsImports GrapeCity.Documents.Word
'' This sample loads an existing document, finds all occurrences'' of a certain string in it, And replaces that string with another one,'' also changing the character format of the replacement string.'' This sample Is almost identical to ReplaceTextFmt'' but uses PersistentRange instead of Range.'' Its primary purpose Is to illustrate the differences between'' Range And PersistentRange.Public Class ReplaceTextFmt2 Function CreateDocx() As GcWordDocument '' The document to replace text in: Dim path = IO.Path.Combine("Resources", "WordDocs", "JsFrameworkExcerpt.docx") '' The text to find Const tFind = "javascript" '' The replacement Const tRepl = "ArabicaScroll"
Dim doc = New GcWordDocument() doc.Load(path)
Dim runs = doc.Body.Runs Dim runRanges = New List(Of PersistentRange)(runs.Count) For Each run In runs runRanges.Add(run.GetPersistentRange()) Next
For Each rr In runRanges Dim str = rr.Text Dim matches = Regex.Matches(str, tFind, RegexOptions.IgnoreCase) If matches.Count = 0 Then Continue For End If
Dim color = rr.ParentRun.Font.Color.RGB rr.Clear() Dim pos = 0 For Each m In matches rr.Runs.Add(str.Substring(pos, m.Index - pos)).Font.Color.RGB = color rr.Runs.Add(tRepl).Font.Color.RGB = Color.Red pos = m.Index + m.Length Next rr.Runs.Add(str.Substring(pos)).Font.Color.RGB = color
If Not String.IsNullOrEmpty(rr.Runs.First.GetRange().Text) Then Throw New Exception("Unexpected") End If rr.Runs.First.Delete()
'' PersistentRange Is kept up to date when the document changes, '' so it should be disposed when no longer needed to improve '' performance And reduce memory consumption: rr.Dispose() Next '' Not strictky necessary but a good practice: runRanges.Clear()
'' Add a note at the end of the document doc.Body.Sections.Last.GetRange().Paragraphs.Add( $"DsWord replaced '{tFind}' with '{tRepl}' on {Util.TimeNow():R}.")
'' Done Return doc End FunctionEnd Class