2016-04-28 13 views
3

Ich schreibe ein Projekt, mit dem Sie .docx-Dokumente bearbeiten (ich habe eine Vorlage, die bearbeitet werden muss) direkt von der Website und speichern Sie sie dein Computer. Ich habe ein Problem mit dem Speichern aller Informationen, die ich bereits in der Datei bearbeitet habe.Bearbeiten und Speichern von .docx in ASP.NET-Programm mit OpenXML & MemoryStream

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); 
} 

verwendete ich this Tutorial von Office-Dev Center, es funktioniert gut im Offline-Lösung. Ein Teil von StreamWriter funktioniert nicht und ich lade ein Dokument herunter, das überhaupt keine Änderungen enthält. Wie kann ich alle Informationen, die ich online bearbeitet habe, in wDoc speichern?

Antwort

0

Sie schreiben den aktualisierten Dokumenttext in StreamWriter sw, aber dann tun Sie nichts damit. Sie setzen dann die Sitzungsvariable auf Ihr ursprüngliches, nicht editiertes Byte-Array memoryStream (das ist vermutlich der Grund, warum Sie ein Dokument ohne Änderungen zurückgeben).

Sie müssen sw in ein Byte-Array konvertieren und das in Session["ByteArray"] stattdessen setzen.

Auch eine große Byte-Array in einer Sitzungsvariablen scheint nicht eine sehr gute Idee.