当前位置: 首页 > 知识库问答 >
问题:

c#OpenXML搜索并替换未保存的文本

郏瀚
2023-03-14

我正在尝试使用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());
    }
}

消息框确实显示了它应该做的大量替换,但是当我打开文档时,我没有看到替换。此外,我认为我不需要那些文档。保存()调用,但是我一直在尝试任何方法来使它工作。有什么建议吗?谢谢

共有2个答案

须衡虑
2023-03-14

尝试以下方法

        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();               
        }
商焕
2023-03-14

我非常幸运地在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 全文替换

  • 问题内容: 我想遍历文本文件的内容,进行搜索并替换某些行,然后将结果写回到文件中。我可以先将整个文件加载到内存中,然后再写回去,但这可能不是最好的方法。 在以下代码中,执行此操作的最佳方法是什么? 问题答案: 我想类似的事情应该做。它基本上将内容写入新文件,并用新文件替换旧文件: