我正在尝试使用OpenXML和埃里克·怀特的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());
}
}
消息框确实显示了它应该做的大量替换,但是当我打开文档时,我没有看到替换。此外,我认为我不需要那些文档。保存()调用,但是我一直在尝试任何方法来使它工作。有什么建议吗?谢谢
尝试以下方法:
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)...我需要在Main DocumentPart上调用这个PutXDocumentPart方法才能使更改生效(而不是文档。保存()我想做的)
doc.MainDocumentPart.PutXDocument();
当我检查doc_text字符串时,我可以看到“{Today}”,但“{ConsultantName}”被拆分为多个运行。开始大括号和结束大括号不与单词放在一起--它们之间有XML标记: 代码
我正在编写一个。NET应用程序,它应该读取一个大约200页长的。docx文件(通常是documentformat.openxml2.5),以查找文档应该包含的某些标记的所有出现情况。明确地说,我不是在寻找OpenXML标记,而是应该由文档编写器设置到文档中的标记,作为在第二阶段需要填充的值的占位符。此类标记应采用以下格式: (其中TAG可以是任意字符序列)。正如我所说的,我必须找到这类标签的所有出
问题内容: 在表的一个特定字段中将进行文本搜索和替换的是哪种MySQL查询? 即搜索并替换为具有值的字段的记录变为。 问题答案: 更改并匹配您的表名和相关字段: 替换(字符串函数) INSTR(字符串函数)
问题内容: 我正在寻找一种通过Shell脚本搜索和替换多行的方法。这就是我想要做的: 简而言之,我想删除注释及其之间的所有内容,并替换为一些新内容。基本上,我想在多行代码上执行一个简单的sed命令,并且如果可能的话,仅使用一些基本的* nix工具,而无需其他脚本语言。 问题答案: 如果您只需要匹配完整的行,则可以使用来完成此任务 。就像是: 如果文件格式不正确,并且注释与要保留或删除的文本在同一行
按下 / 键,编辑器底部会出现 / 符号,接着输入字符串,便可以进行搜索 / 向下搜索 ? 向上搜索 n 搜索下一个 N 搜索上一个 :s/源字符串/目标字符串 将源字符串替换为目标字符串 :s/源字符串/目标字符串/g 替换当前行中所有符合条件的字符串 :行号1,行号2s/源字符串/目标字符串/g 在指定行中进行替换 :%s/源字符串/目标字符串/g 全文替换
问题内容: 我想遍历文本文件的内容,进行搜索并替换某些行,然后将结果写回到文件中。我可以先将整个文件加载到内存中,然后再写回去,但这可能不是最好的方法。 在以下代码中,执行此操作的最佳方法是什么? 问题答案: 我想类似的事情应该做。它基本上将内容写入新文件,并用新文件替换旧文件: