我正在尝试使用OpenXML和Eric White的OpenXmlPowerTools(从NuGet安装)对.docx word文档进行基本搜索和替换。我已经关注了这个网站和他的博客上的示例,但出于某种原因,我在运行代码后打开它时从未看到文档中出现的更改。这是我正在运行的简单函数:
void ReadDocument(string path)
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(path, true))
{
var content = doc.MainDocumentPart.GetXDocument().Descendants(W.p);
var regex = new Regex(@"the", RegexOptions.IgnoreCase);
int count = OpenXmlRegex.Replace(content, regex, "NewText", null);
doc.MainDocumentPart.Document.Save();
doc.Save();
MessageBox.Show(count.ToString());
}
}
消息框确实显示了应该进行的大量替换,但是当我打开文档时,我看不到替换。另外,我认为我不应该需要那些文件.Save()调用,但我一直在努力让这个东西起作用。有什么建议?感谢
答案 0 :(得分:2)
我很幸运地在18:52偶然发现了OpenXmlRegex youtube视频(https://youtu.be/rDGL-i5zRdk?t=18m52s)的答案。我需要在MainDocumentPart上调用此PutXDocument()方法以使更改生效(而不是doc.Save()我试图这样做)
doc.MainDocumentPart.PutXDocument();
答案 1 :(得分:0)
尝试这种方法:
using (WordprocessingDocument doc = WordprocessingDocument.Open(@"filePath", true))
{
string docText = null;
using (StreamReader sr = new StreamReader(doc.MainDocumentPart.GetStream()))
{
docText = sr.ReadToEnd();
}
Regex regexText = new Regex(@"the", RegexOptions.IgnoreCase);
docText = regexText.Replace(docText, "New text");
using (StreamWriter sw = new StreamWriter(doc.MainDocumentPart.GetStream(FileMode.Create)))
{
sw.Write(docText);
}
doc.MainDocumentPart.Document.Save();
}