繁体   English   中英

使用OpenXML和MemoryStream在ASP.NET程序中编辑和保存.docx

[英]Editing & saving .docx in ASP.NET program using OpenXML & MemoryStream

我正在编写一个项目,允许您直接从站点编辑.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);
}

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

您正在将更新的文档文本写入StreamWriter sw但之后没有对其执行任何操作。 然后,您将会话变量设置为原始未编辑的字节数组memoryStream (这可能是您返回没有更改的文档的原因)。

您需要将sw转换为字节数组并将其放在Session["ByteArray"]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM