Wie finde ich exaktes Wort aus einem Word-Dokument mit Open XML in C #?

Ich muss genaues Wort finden, das ich vom Wortdokument ersetzen möchte, das Open xml in C# verwendet. der Zweck, die persönlichen Details des Benutzers mit irgendeinem Sonderzeichen zu ersetzen, damit es für Leser nicht sichtbar ist.

Für ein Beispiel hat der Benutzer die Adresse in seinem Formular erwähnt, die in der Datenbank gespeichert ist Er hat auch ein Word-Dokument hochgeladen, das Word-Dokument enthält auch folgende Art von String, der mit seiner Adresse übereinstimmt. Mein Ziel ist es, die Adresse mit ### zu verknüpfen

signieren, damit andere Benutzer die Adresse nicht sehen können. z.B.

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

Auf der Suche nach einer Chance, die mich zu einer Persönlichkeit macht, die die Massen beeinflusst und das zu effektiv. Organisatorisch würde ich mich bemühen, an einem einzigen zu arbeiten

Stellen Sie ohne professionelle Schalter, und würde gerne in einer Umgebung arbeiten, die ständige Entwicklung mit variablen Domänen erfordert, um zu handeln

mit."

Ich möchte "Co", "Op" durch "#" ersetzen. Meine Ausgabe wäre das:

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

Auf der Suche nach einer Chance, die mich zu einer Persönlichkeit macht, die die Massen beeinflusst und das zu effektiv. Organisatorisch würde ich mich bemühen, an einem einzigen zu arbeiten

Stellen Sie ohne professionelle Schalter, und würde gerne in einer Umgebung arbeiten, die ständige Entwicklung mit variablen Domänen erfordert, um zu handeln

mit. "

Jetzt habe ich mehrere Fragen 1. Wie kann ich nach ganzen Wort suchen, gerade jetzt ersetzt mein Code Gelegenheitswort mit ## portunity, da dieses Wort Op. Gleich mit Constant wird es durch ## nstant ersetzt. Ich muss ersetzen, wenn das ganze Wort übereinstimmt.

  1. wie kann ich die ganze Zeile in dem Wort oder die ganze Adresse übereinstimmen, sollte die Adresse als Ganzes ersetzen, wenn nicht möglich, sollte es 70-80% ersetzen.

Derzeit ist mein Code wie folgt, um ein Wort in eine Word-Datei zu ersetzen.

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 Antworten

Sie können die Methode TextReplacer in PowerTools für Open xml verwenden, um zu erreichen, was Sie wollen. Dann kannst du so etwas machen:

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);
        }
    }
}

Führen Sie den folgenden Befehl in der Package Manager Console aus, um das Nuget-Paket für OpenXml Power Tools zu installieren

PM > Install-Package OpenXmlPowerTools

0
hinzugefügt

Sie verwenden OpenXML mit Novacode, sollten Sie nur OpenXML verwenden.

Über den ersetzenden Text mit "#". Sie müssen alle Absätze im Word-Dokument durchlaufen und die darin enthaltenen Textelemente prüfen, um zu sehen, ob der gesuchte Text vorhanden ist, und falls vorhanden, können Sie den Text ersetzen.

Sonst nichts anderes. Hoffe das hilft.

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

Ich habe diesen Code aus dem Speicher geschrieben, aber wenn Sie mit diesen Zeilen fortfahren, werden Sie Ihre Lösung finden.

0
hinzugefügt
Danke für deine Antwort. Können Sie mir bitte ein Beispiel geben, wie man Text durch alle Absätze im Word-Dokument findet?
hinzugefügt der Autor user3110006, Quelle
Vielen Dank Varun für Ihre hilfreiche Antwort.
hinzugefügt der Autor user3110006, Quelle

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

Hoffe das hilft.

0
hinzugefügt