使用Open XML SDK生成Word文档时始终返回当前HTML页面问题求助
问题分析与解决
你用Open XML SDK生成Word文档时,无论输入什么内容,生成的文档总是显示当前HTML页面内容,核心原因是代码遗漏了将构建好的内容关联到文档核心结构的关键步骤,导致生成的文档结构不完整,Word自动修复时出现异常内容。
你的原始代码
public IActionResult GenerateDocxBrowser() { using (MemoryStream mem = new MemoryStream()) { using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(mem, WordprocessingDocumentType.Document, true)) { // Add a main document part. MainDocumentPart mainPart = wordDocument.AddMainDocumentPart(); // Create the document structure and add some text. mainPart.Document = new Document(); Body docBody = new Body(); // Add your docx content here Paragraph p = new Paragraph(); Run r = new Run(); Text t = new Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent quam augue, tempus id metus in, laoreet viverra quam. Sed vulputate risus lacus, et dapibus orci porttitor non."); r.Append(t); p.Append(r); docBody.Append(p); } var cd = new ContentDispositionHeaderValue("attachment") { FileNameStar = "ABC.docx" }; Response.Headers.Add(HeaderNames.ContentDisposition, cd.ToString()); return File(mem.ToArray(),"application/vnd.openxmlformats-officedocument.wordprocessingml.document"); } }
修改后的代码
public IActionResult GenerateDocxBrowser() { using (MemoryStream mem = new MemoryStream()) { using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(mem, WordprocessingDocumentType.Document, true)) { // 添加主文档部分 MainDocumentPart mainPart = wordDocument.AddMainDocumentPart(); // 创建文档结构并添加文本 mainPart.Document = new Document(); Body docBody = new Body(); // 添加自定义内容 Paragraph p = new Paragraph(); Run r = new Run(); Text t = new Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent quam augue, tempus id metus in, laoreet viverra quam. Sed vulputate risus lacus, et dapibus orci porttitor non."); r.Append(t); p.Append(r); docBody.Append(p); // 关键:将构建好的Body关联到Document节点 mainPart.Document.Body = docBody; } var cd = new ContentDispositionHeaderValue("attachment") { FileNameStar = "ABC.docx" }; Response.Headers.Add(HeaderNames.ContentDisposition, cd.ToString()); return File(mem.ToArray(), "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); } }
核心修复点
原代码仅创建了包含文本的Body对象,但未将其绑定到文档的Document根节点上,导致生成的docx文件缺少核心内容结构。添加mainPart.Document.Body = docBody;后,自定义内容会被正确写入文档,Word打开时就能正常显示你设置的文本。
内容的提问来源于stack exchange,提问作者Cool_BAMBOO
相关产品推荐
相关产品推荐

