c# OpenXML 搜索和替换不保存的文本
c# OpenXML search and replace text not saving
我正在尝试使用 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() 调用,但我一直在尝试任何事情来使它正常工作。有什么建议么?谢谢
试试这个方法:
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();
}
我非常幸运地在 18:52 上偶然发现了 OpenXmlRegex youtube 视频 (https://youtu.be/rDGL-i5zRdk?t=18m52s) 中的答案。我需要在 MainDocumentPart 上调用这个 PutXDocument() 方法来进行更改效果(而不是我试图做的 doc.Save())
doc.MainDocumentPart.PutXDocument();
我正在尝试使用 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() 调用,但我一直在尝试任何事情来使它正常工作。有什么建议么?谢谢
试试这个方法:
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();
}
我非常幸运地在 18:52 上偶然发现了 OpenXmlRegex youtube 视频 (https://youtu.be/rDGL-i5zRdk?t=18m52s) 中的答案。我需要在 MainDocumentPart 上调用这个 PutXDocument() 方法来进行更改效果(而不是我试图做的 doc.Save())
doc.MainDocumentPart.PutXDocument();