【发布时间】:2020-02-25 18:53:40
【问题描述】:
我有一个现有的库,可用于接收 docx 文件并将其返回。该软件是托管在 Linux Docker 容器中的 .Net Core。
虽然范围非常有限,但我需要执行一些它无法执行的操作。由于这些很简单,我想我会使用 OpenXML,为了我的概念验证,我需要做的就是将 docx 作为内存流读取,替换一些文本,将其转回内存流并返回。
但是,返回的 docx 是不可读的。我已经注释掉了下面的文本替换以消除它,如果我注释掉对下面方法的调用,那么可以读取 docx,所以我确定问题出在这个方法中。
大概我在这里做了一些根本错误的事情,但是在谷歌搜索和玩弄代码几个小时后,我不知道如何纠正这个问题;有什么想法我有什么问题吗?
感谢您的帮助
private MemoryStream SearchAndReplace(MemoryStream mem)
{
mem.Position = 0;
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(mem, true))
{
string docText = null;
StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream());
docText = sr.ReadToEnd();
//Regex regexText = new Regex("Hello world!");
//docText = regexText.Replace(docText, "Hi Everyone!");
MemoryStream newMem = new MemoryStream();
newMem.Position = 0;
StreamWriter sw = new StreamWriter(newMem);
sw.Write(docText);
return newMem;
}
}
【问题讨论】:
-
您需要设置断点并调试才能使用xml可视化工具查看
docText = regexText.Replace(docText, "Hi Everyone!");。检查Hello world!是否在xml文件的同一行。如果在同一行,您可以搜索可以,但是文件会损坏。如果不在同一行,则无法搜索。更多详细信息您可以参考:stackoverflow.com/a/6010906/11398810 -
您的问题解决了吗?
标签: asp.net-core openxml docx memorystream