¿Cómo encontrar la palabra exacta de un documento de Word usando Open XML en C #?

Necesito encontrar la palabra exacta que quiero reemplazar del documento de Word usando Open xml en C #. el propósito de reemplazar los detalles personales del usuario con algún carácter especial para que no sea visible para el lector.

Por ejemplo, el usuario tiene una dirección mencionada en su formulario, que se almacena en la base de datos él también tiene un documento de una palabra cargado, el documento de la palabra también contiene el siguiente tipo de cadena que coincide con su dirección. mi propósito es hacer coincidir la dirección con ###

firmar para que otros usuarios no puedan ver la dirección. p.ej.

 "422, Plot no. 1000/A, The Moon Residency II, Shree Nagrik Co. Op. Society, Sardarnagar, Ahmedabad.

Buscando una oportunidad que supere al hacerme una personalidad que influya en las masas y eso de manera muy efectiva. Organizacionalmente, me esforzaría por trabajar en un solo

lugar sin interruptores profesionales y me encantaría trabajar en un entorno que exige una evolución constante con dominios variables incorporados para tratar

con."

Quiero reemplazar "Co", "Op" con el signo "#". Mi salida sería esta:

"422, Plot no. 1000/A, The Moon Residency II, Shree Nagrik #. #. Society, Sardarnagar, Ahmedabad.

Buscando una oportunidad que supere al hacerme una personalidad que influya en las masas y eso de manera muy efectiva. Organizacionalmente, me esforzaría por trabajar en un solo

lugar sin interruptores profesionales y me encantaría trabajar en un entorno que exige una evolución constante con dominios variables incorporados para tratar

con. "

Ahora tengo varias preguntas 1. ¿Cómo puedo buscar la palabra completa? Ahora mismo, mi código reemplaza la palabra de oportunidad con ##, ya que esta palabra tiene Op. Lo mismo con Constant reemplaza con ## nstant. Necesito reemplazar si la palabra completa coincide.

  1. cómo puedo hacer coincidir toda la línea de la palabra o puede ser toda la dirección, la dirección debe reemplazarse como un todo, si no es posible, debe reemplazar el 70-80%.

Actualmente mi código es el siguiente para reemplazar palabra en archivo de palabra.

MemoryStream m = new System.IO.MemoryStream();
//strResumeName contain my word file url
m = objBlob.GetResumeFile(strResumeName);

   using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(m, true))
  {
            body = wordDoc.MainDocumentPart.Document.Body;
            colT = body.Descendants();
            foreach (DocumentFormat.OpenXml.Wordprocessing.Text c in colT)
              {
                 if (c.InnerText.Trim() != String.Empty)
                     {
                       sb.Append(c.InnerText.Trim() + " ");
                     }
              }
               string[] strParts = sb.ToString().Split(' ');
               HyperLinkList = HyperLinksList(wordDoc);
               redactionTags = GetReductionstrings(strParts);
}
 using (Novacode.DocX document = Novacode.DocX.Load(m))
 {
//objCandidateLogin.Address contain my address
  if (!String.IsNullOrEmpty(objCandidateLogin.Address))
  {
     string[] strParts = objCandidateLogin.Address.Replace(",", " ").Split(' ');
     for (int I = 0; I <= strParts.Length - 1; I++)
       {
            if (strParts[I].Trim().Length > 1)
             {
                document.ReplaceText(strParts[I].Trim(), "#############", false, RegexOptions.IgnoreCase);
              }
          }

   }
}
0

3 Respuestas

Puede utilizar el método TextReplacer en PowerTools for Open xml para lograr lo que desea. Entonces puedes hacer algo como esto:

using DocumentFormat.OpenXml.Packaging;
using OpenXmlPowerTools;
using System.IO;

namespace SearchAndReplace
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            using (WordprocessingDocument doc = WordprocessingDocument.Open("Test01.docx", true))
                TextReplacer.SearchAndReplace(wordDoc:doc, search:"the", replace:"this", matchCase:false);
        }
    }
}

Para instalar el paquete Nuget para OpenXml Power Tools, ejecute el siguiente comando en la consola del Administrador de paquetes

PM > Install-Package OpenXmlPowerTools

0
agregado

Está utilizando OpenXML con Novacode, debería considerar usar solo OpenXML.

Acerca del reemplazo de texto con "#". Tendrá que recorrer todos los párrafos en el documento de Word y verificar los elementos de Texto dentro de ellos para ver si el texto que está buscando existe y, si existe, puede reemplazar el texto.

Nada más. Espero que esto ayude.

IEnumerable paragraphs = document.Body.Descendants();
foreach(Paragraph para in paragraphs)
{
    String text = para.Descendents().FirstOrDefault();
    //Code to replace text with "#"
}

He escrito este código sin memoria, pero si continúas en estas líneas, encontrarás tu solución.

0
agregado
Gracias por su respuesta. ¿Puede darme un ejemplo de cómo encontrar texto a través de todos los párrafos en un documento de Word?
agregado el autor user3110006, fuente
Muchas gracias Varun por su útil respuesta.
agregado el autor user3110006, fuente

There is an OpenXML Power Tools class for searc and replace text in OpenXML Document. Get it from here. http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/08/04/introducing-textreplacer-a-new-class-for-powertools-for-open-xml.aspx

Espero que esto ayude.

0
agregado