2016-04-28 47 views
3

我正在编写一个项目,它允许您直接从该站点编辑.docx文档(我有一个需要编辑的模板)并将它们保存到你的电脑。 我在保存文件中已编辑的所有信息时遇到问题。使用OpenXML&MemoryStream在ASP.NET程序中编辑和保存.docx

using (MemoryStream memoryStream = new MemoryStream()) 
{ 
    memoryStream.Write(byteArray, 0, byteArray.Length); 
    using (WordprocessingDocument wDoc = WordprocessingDocument.Open(memoryStream, true)) 
    { 
     string docText = null; 
     using (StreamReader sr = new StreamReader(wDoc.MainDocumentPart.GetStream())) 
     { 
      docText = sr.ReadToEnd(); 
     } 

     var senderData = Sender_Textbox.Text; 
     var receiverData = Receiver_Textbox.Text; 
     var subjectData = Subject_Textbox.Text; 
     var contentData = Content_Textbox.Text; 

     docText = ReplaceData(docText, "receiver", receiverData); 
     docText = ReplaceData(docText, "sender", senderData); 
     docText = ReplaceData(docText, "subject", subjectData); 
     docText = ReplaceData(docText, "content", contentData); 

     using (StreamWriter sw = new StreamWriter(wDoc.MainDocumentPart.GetStream(FileMode.Create))) 
     { 
      sw.Write(docText); 
     } 
    } 
    Session["ByteArray"] = memoryStream.ToArray(); 
} 

static string ReplaceData(string docText, string oldText, string newText) 
{ 
    var regexText = new Regex(oldText); 
    return regexText.Replace(docText, newText); 
} 

我以前this教程从Office开发中心,它运作良好,在离线的解决方案。使用StreamWriter的部分不起作用,我下载了一个根本没有改变的文档。如何将我在线编辑的所有信息保存在wDoc中?

回答

0

您正在将更新的文档文本写入StreamWriter sw,但之后没有做任何处理。然后,您将会话变量设置为原始未编辑的字节数组memoryStream(这可能是您为什么要返回没有更改的文档)。

您需要将sw转换为一个字节数组,然后将其放入Session["ByteArray"]

此外,会话变量中的大字节数组似乎不是一个非常好的主意。