我正在尝试使用以下代码从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);
}
}
但是在尝试打开文件时收到以下消息:“由于内容存在问题,无法打开文件{文件名}”
然后我得到一个选项来恢复实际修复文档的文档。
我是否遗漏了什么?
答案 0 :(得分:0)
您获得的错误消息意味着底层XML不以某种方式符合架构。这可能是由于元素的顺序错误,忘记元素的父元素,添加错误的属性,忘记所需的元素等等。我建议下载Open XML SDK 2.0 Productivity Tool,创建一个测试文件,然后打开它看看XML应该是什么。然后将该文件与您正在创建的文件进行比较,以查看缺少的内容。