我需要在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。 如果整个单词匹配,我需要替换。
目前我的代码如下所示,将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);
}
}
}
}
答案 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
希望这有帮助。