从asp.net网页提供使用Open XML生成的word文档

时间:2011-07-11 07:40:03

标签: asp.net openxml

我正在尝试使用以下代码从asp.net页面提供word文档(docx)

    protected void Page_Load(object sender, EventArgs e)
    {

        MemoryStream document = new MemoryStream();
        using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
        {
            MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();
            SetMainDocumentContent(mainPart);
        }

        string fileName = "MsWordSample.docx";
        Response.AppendHeader("Content-Type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        Response.AppendHeader("Content-disposition", "attachment; filename=" + fileName);
        Response.OutputStream.Write(document.ToArray(), 0, document.ToArray().Length);
    }

    public static void SetMainDocumentContent(MainDocumentPart part)
    {
        const string docXml =
         @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?> 
        <w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
        <w:body>
            <w:p>
                <w:r>
                    <w:t>Hello world!</w:t>
                </w:r>
            </w:p>
        </w:body>
        </w:document>";

        using (Stream stream = part.GetStream())
        {
            byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
            stream.Write(buf, 0, buf.Length);
        }
    }

但是在尝试打开文件时收到以下消息:“由于内容存在问题,无法打开文件{文件名}”

然后我得到一个选项来恢复实际修复文档的文档。

我是否遗漏了什么?

1 个答案:

答案 0 :(得分:0)

您获得的错误消息意味着底层XML不以某种方式符合架构。这可能是由于元素的顺序错误,忘记元素的父元素,添加错误的属性,忘记所需的元素等等。我建议下载Open XML SDK 2.0 Productivity Tool,创建一个测试文件,然后打开它看看XML应该是什么。然后将该文件与您正在创建的文件进行比较,以查看缺少的内容。