2016-04-28 1 views
3

を使用してASP.NETプログラムでの.docxを保存しますあなたのコンピュータ。 すでに編集したすべての情報を保存する際に問題があります。編集&Iはあなたのサイトから直接(私は編集する必要がテンプレートを持っている)文書を.docxの編集に保存することを可能にするプロジェクトを書いているの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); 
} 

私はOffice Dev Centerからthisチュートリアルを使用しましたが、オフラインソリューションでうまく動作します。 StreamWriterのある部分は機能せず、変更のない文書をダウンロードします。オンラインで編集したすべての情報をwDocに保存するにはどうすればよいですか?

答えて

0

あなたはStreamWriter swに更新された文書のテキストを書いたが、それを使って何をやっていません。セッション変数をオリジナルの未編集のバイト配列memoryStreamに設定しています(おそらく、変更を加えずにドキュメントを返すのでしょう)。

あなたはバイト配列にswを変換し、代わりにSession["ByteArray"]にそれを配置する必要があります。

また、セッション変数の大きなバイト配列はひどく良い考えではありません。

関連する問題