如何在C#中使用Open XML从word文档中找到确切的单词?

时间:2013-12-17 08:14:00

标签: c# openxml word-processor

我需要在C#中使用Open XML找到我想用word文档替换的确切单词。 用一些特殊字符替换用户的个人详细信息的目的,以使其对读者不可见。

例如,用户的表单中提到的地址存储在数据库中 他还上传了一个word文档,word文档还包含与其地址匹配的以下类型的字符串。我的目的是将地址与###

相匹配

签名,以便其他用户无法看到该地址。 e.g。

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

寻找机会超越让我成为影响群众的人格,而且效率太高。在组织上,我会努力在单一的

工作

没有制作专业开关的地方,并且愿意在需要不断发展的环境中工作,并将可变域合并到交易中

用“

我想用“#”代替“Co”,“Op”。 我的输出是这样的:

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

寻找机会超越让我成为影响群众的人格,而且效率太高。在组织上,我会努力在单一的

工作

没有制作专业开关的地方,并且愿意在需要不断发展的环境中工作,并将可变域合并到交易中

用。 “

现在我有几个问题 1.我如何搜索整个单词,现在我的代码用## portunity替换机会单词,因为这个单词有Op。与Constant相同,它取代了## nstant。 如果整个单词匹配,我需要替换。

  1. 我如何匹配单词中的整行或者可能是整个地址,地址应该整体替换,如果不可能,则应该替换70-80%。
  2. 目前我的代码如下所示,将word替换为word文件。

    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<DocumentFormat.OpenXml.Wordprocessing.Text>();
                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);
                  }
              }
    
       }
    }
    

3 个答案:

答案 0 :(得分:1)

您可以使用PowerTools for Open XML中的TextReplacer方法来完成您想要的任务。然后你可以做这样的事情:

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

要安装OpenXml Power Tools的Nuget软件包,请在软件包管理器控制台中运行以下命令

  

PM&gt;安装包OpenXmlPowerTools

答案 1 :(得分:0)

你正在使用OpenXML和Novacode,你应该考虑只使用OpenXML。

关于用“#”替换文本。您将不得不遍历word文档中的所有段落并检查其中的Text元素,以查看您要查找的文本是否存在以及是否存在,您可以替换该文本。

没有别的。希望这会有所帮助。

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

我已经用内存写了这段代码,但是如果继续这些代码,你会发现你的解决方案。

答案 2 :(得分:0)

OpenXML Power Tools类用于在OpenXML Document中搜索和替换文本。 从这里获取它。 http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/08/04/introducing-textreplacer-a-new-class-for-powertools-for-open-xml.aspx

希望这有帮助。

相关问题