martes, 7 de julio de 2009

Buscar texto en Word (documentos) desde C#

Siguiendo con los anteriores post relacionados con manejar documentos Word desde nuestra aplicacion en C#, vamos a buscar, por texto o por formato.

Por texto:
"Benito Rodriguez" --> Encontrar una o todas (las que queramos) ocurrencias y modificar cualquier propiedad del texto.

Por formato:
Encontrar todas las palabras con un color, negrita, tamaño o lo que se desee.

Texto:
En este ejemplo pondremos color de fondo a la 1ª ocurrencia encontrada.

rngPrimera.Find.Text = buscar;

Color = Word.WdColorIndex.wdYellow;
object caseSensitive = true;//Para que encuentre la palabra exactamente, diferencie entre encontrar la cadena dentro de otra, mayúsculas, etc.

rngPrimera.Find.Execute(ref oNulo, ref caseSensitive, ref caseSensitive, ref caseSensitive, ref oNulo,, ref oNulo, ref oNulo, ref oNulo, ref oNulo, ref oNulo, ref oNulo,ref oNulo, ref oNulo, ref oNulo, ref oNulo);

Esto lo hace con la 1ªocurrencia:

if (rng.Find.Found){

...
rng.SetRange(inicio, final);
rng.Select();
rng.HighlightColorIndex = color;
marca = rng.End ; }

Esto con todas (o lo que condicionemos):

while (rng.Find.Found){...}

Buscar formato:
En este caso el algoritmo se plantea diferente:

Del documento (y de los rangos) se puede saber tanto los párrafos como las frases y/o las palabras.

int palabras = oWordDoc.Words.Count;
int frases = oWordDoc.Sentences.Count;

De las palabras y frases, también se puede obtener los rangos:


for(int i = 1; i < frases ; i++)
{
//Asignar al rango esa palabra
inicio = oWordDoc.Sentences[i].Start;
final = oWordDoc.Sentences[i].End;
...}



Para encontrar un formato recorreremos el documento por frases.

En nuestro ejemplo de buscar fondo distinto al por defecto:

if (rngC.HighlightColorIndex != auto){...}

Una vez encontrada la frase, recorrerla por palabras para encontrar sólo las que tengan el fondo, porque lo anterior de ”true” en el caso que alguna palabra lo dé.

Un ejemplo para seleccionar la 1ªpalabra con fondo sería:


for (int j = 1; j <palabras && primera; j++)
{
if (rngC.Words[j].HighlightColorIndex != auto)
{
primera = false;
inicio = rngC.Words[j].Start;
fin = rngC.Words[j].End;
}
}



1 comentario:

  1. Estos ejemplos tendrian un valor impresionante si estuvieran bien explicados. Agradezco mucho que te hayas tomado el trabajo de hacerlos y luego la bondad de compartirlos, pero de verdad que les falta mucha claridad, llevo 1 hora leyendo lo que estas diciendo y todo es confuso porque no explicas ciertas lineas, no dices que hacen ciertas cosas, etc.

    Te lo digo como recomendacion, y ojala para los proximos articulos mejores eso (aunque no he visto mas que los de word).

    Hasta luego...

    ResponderEliminar