Hi, I tried to add a bookMarkStart and a bookMarkEnd in a document, removing hidden text.
My code:
Public Class ManipulateWordProcessingDocument Private _wdDoc As WordprocessingDocument Public Sub New(ByVal wDoc As WordprocessingDocument) Me._wdDoc = wDoc End Sub Public Function FindHiddenText(ByVal textoOculto As String) As Run Dim runResult As Run = Nothing Try runResult = Me._wdDoc.MainDocumentPart.RootElement.Descendants(Of Run).Where(Function(r) r.RunProperties IsNot Nothing AndAlso r.RunProperties.Vanish IsNot Nothing AndAlso r.InnerText.Equals(textoOculto)).FirstOrDefault Catch ex As Exception If True Then End If End Try Return runResult End Function ''' <summary> ''' Devuelvo la marca final porque entre el marcador BookMarkStart y el BookMarkEnd, nosotros no tenemos nada, y siempre ''' nos va a interesar hacer cualquier cosa despues del BookMarkEnd, y siempre comparten padre. ''' </summary> ''' <param name="nombreMarca"></param> ''' <returns></returns> ''' <remarks></remarks> Public Function FindBookMark(ByVal nombreMarca As String) As BookmarkEnd Dim bookmark As BookmarkEnd = Nothing Dim marcaStart As BookmarkStart Try marcaStart = Me._wdDoc.MainDocumentPart.RootElement.Descendants(Of BookmarkStart).Where(Function(b) b.Name.Value.Equals(nombreMarca)).FirstOrDefault If marcaStart IsNot Nothing Then bookmark = bookmark.Parent.Descendants(Of BookmarkEnd).Where(Function(b As BookmarkEnd) b.Id.Value.Equals(marcaStart.Id.Value)).FirstOrDefault End If Catch ex As Exception If True Then End If End Try Return bookmark End Function
Public Function ReplaceHiddenTextByBookMark(ByVal nombreOculto As String) As Boolean Dim oculto As Run = Nothing Dim elementoPadre As OpenXmlElement = Nothing Dim marcadorStart As BookmarkStart = Nothing Dim marcadorEnd As BookmarkEnd = Nothing oculto = Me.FindHiddenText(nombreOculto) If oculto IsNot Nothing Then Try elementoPadre = oculto.Parent marcadorStart = New BookmarkStart() marcadorStart.Name = "Principio" & nombreOculto elementoPadre.InsertAfter(marcadorStart, oculto) marcadorEnd = New BookmarkEnd() marcadorEnd.Id = marcadorStart.Id elementoPadre.InsertAfter(marcadorEnd, marcadorStart) marcadorStart = New BookmarkStart() marcadorStart.Name = "Fin" & nombreOculto elementoPadre.InsertAfter(marcadorStart, marcadorEnd) marcadorEnd = New BookmarkEnd() marcadorEnd.Id = marcadorStart.Id elementoPadre.InsertAfter(marcadorEnd, marcadorStart) oculto.Parent.RemoveChild(oculto) Return True Catch ex As Exception If True Then End If End Try End If Return False End Function
....
End Class
But the property id of instance "marcadorStart" is nothing, how I do to create a instance of BookMarkStart with id?
Hi -
I've created a screen-cast that shows one approach to inserting a bookmark:
openxmldeveloper.org/.../working-with-wordprocessingml-paragraphs-and-runs-how-to-insert-a-bookmark.aspx
-Eric