在 MVC 上使用基于 Microsoft 站点的 WordprocessingDocument 后收到一条消息“内存流不可扩展”

hoa*_*ien 0 c# asp.net-mvc asp.net-mvc-4

目前,我基于 Microsoft 站点上的“在文档部分(Open XML SDK)中搜索和替换文本”。我意识到在文件下载到我的驱动器后代码出现问题。

所以我打开那个文件并收到一条消息

内存流在 sw.Write(docText) 处不可扩展;

如何解决?

在 GenerateDocxHelper 类中:

 private readonly MemoryStream _mem;
 private Dictionary<string, string> _dicData;

 public GenerateDocxHelper(string path)
 {
     _mem = new MemoryStream(System.IO.File.ReadAllBytes(path));
     _dicData = new Dictionary<string, string>();
 }

 public MemoryStream ReplaceTextInWord()
 {
     using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(_mem, true))
        {


            string docText = null;
            using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
            {
                docText = sr.ReadToEnd();
            }


            foreach (var data in _dicData)
            {
                docText = docText.Replace(data.Key, data.Value);
            }

            using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
            {
                sw.Write(docText);
            }
        }

        _mem.Seek(0, SeekOrigin.Begin);

        return _mem;
 }
Run Code Online (Sandbox Code Playgroud)

csh*_*aml 8

您应该创建MemoryStreamwithcapacity = 0这意味着它可以调整大小,然后添加您从文件中读取的字节。

var allBytes = File.ReadAllBytes(path);

//this makes _mem resizeable 
_mem = new MemoryStream(0);

_mem.Write(allBytes, 0, allBytes.Length);
Run Code Online (Sandbox Code Playgroud)

检查这个答案