2011-02-10 34 views
9

El código de C# .net recomendado para reemplazar un marcador de favorito con texto parece muy sencillo y he visto el mismo código en todos los sitios web (incluido el suyo, desde una publicación de septiembre de 2009). Sin embargo, no puedo pasar el errorEl rango no se puede eliminar. en Microsoft.Office.Interop.Word.Range.set_Text (String prop)

No se puede eliminar el rango. en Microsoft.Office.Interop.Word.Range.set_Text (String prop)

(estoy usando VS 2010 con Windows 7 y Word 2010 14.0).

Mi código:

private void ReplaceBookmarkText(Microsoft.Office.Interop.Word.Document doc, string bookmarkName, string text) 
     { 
      try 
      { 
       if (doc.Bookmarks.Exists(bookmarkName)) 
       { 
        Object name = bookmarkName; 
        // throws error 'the range cannot be deleted' 
        doc.Bookmarks.get_Item(ref name).Range.Text = text; 
       } 
      } 

Respuesta

8

lugar de modificar el rango directamente, intente algo como:

Bookmark bookmark = doc.Bookmarks.get_Item(ref name); 

//Select the text. 
bookmark.Select(); 

//Overwrite the selection. 
wordApp.Selection.TypeText(text); 

P. ej utilice su instancia de aplicación de Word para modificar el documento en su lugar.

+0

Esto funciona, ¿no tienes la alternativa de enlace tardío? – Schuere

1
if (doc.Bookmarks.Exists(name)) 
    { 
     Word.Bookmark bm = doc.Bookmarks[name]; 
     bm.Range.Text = text 
    } 

esto funciona, pero recuerde, si se reemplaza todo el texto de un marcador existente esta manera, el marcador desaparece. Cada vez que reemplaza el primer carácter de un marcador existente (incluso si lo reemplaza con lo que ya estaba allí), el marcador se consume. Lo que encontré funciona (aunque no afirmo que este sea el método aprobado por Microsoft) es algo como esto:

if (doc.Bookmarks.Exists(name)) 
    { 
     Word.Bookmark bm = doc.Bookmarks[name]; 
     Word.Range range = bm.Range.Duplicate; 
     bm.Range.Text = text;     // Bookmark is deleted, range is collapsed 
     range.End = range.Start + text.Length; // Reset range bounds 
     doc.Bookmarks.Add(name, range);   // Replace bookmark 
    } 
+0

Esto todavía arrojará el error "No se puede eliminar el rango" COMException – Schuere

+0

¿Bajo qué circunstancias arroja COMException? –

+0

Campo de formulario de texto con configuración de campo Marcador. ==> encontrado Office no crea un marcador correcto al configurar este campo. Aún debe hacer INSERT => Marcador => "Seleccionar marcador" => Agregar. Para crear un marcador correcto (Suspiro ...) + EDITAR: Voto esta respuesta porque es correcta. – Schuere

Cuestiones relacionadas