2013-12-17 52 views
1

我需要使用C#中的Open XML查找從Word文檔替換的確切詞。 用一些特殊的字符替換用戶的個人信息,使其對讀者不可見。如何在C#中使用Open XML查找word文檔中的確切單詞?

例如,用戶的地址中提到的地址存儲在數據庫 中,他還有一個單詞文件上傳,word文檔還包含以下類型的匹配他的地址的字符串。我的目的是將地址與###

符號相匹配,以便其他用戶不能看到地址。 例如

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

尋找一個超越使我成爲一個影響大衆的人格並且過於有效的機會。在組織上,我將努力在一個單一的

地方正在作出不專業的切換工作,很想在要求與合併處理

與可變區不斷演變的環境中工作。」

我想,以取代「合作」,「作品」和「#」號 我的輸出會是這樣:

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

尋找,在做我影響羣衆個性超越的機會這太有效了。在組織上,我將努力在一個單一的

地方沒有專業的切換正在進行的工作,他會喜歡在要求與合併處理

與可變區不斷演變的環境中工作。 「

現在我有幾個問題 1.如何可以搜索整個單詞,現在我的代碼替換機會用字## portunity因爲這個詞有作品。同樣的,常將其與## nstant取代。 我如果需要全字匹配替換。

  1. 我怎麼可以在字的整行匹配,或可能是整個地址,這個地址應該是取代作爲一個整體,如果沒有可能,就應更換70-80 %。

目前我的代碼如下圖所示將單詞替換爲單詞文件中。

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

    } 
} 

回答

0

您使用的OpenXML與Novacode,你應該考慮使用剛剛OpenXML的。

關於用「#」替換文字。您必須遍歷Word文檔中的所有段落,並檢查其中的文本元素,以查看您要查找的文本是否存在,以及是否存在可替換文本。

沒有別的。希望這可以幫助。

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

我寫這段代碼的內存不足,但如果你繼續在這些線路上,你會發現你的解決方案。

+0

感謝您的回覆。你能給我一個例子如何通過word文檔中的所有段落找到文本? – user3110006

+0

非常感謝Varun的回覆。 – user3110006

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

要安裝的NuGet包OPENXML電動工具,在Package Manager中運行以下命令控制檯

PM>安裝,包裝OpenXmlPowerTools

相關問題