C#:编辑/保存/发送docx文档

编程入门 行业动态 更新时间:2024-10-23 12:30:25
本文介绍了C#:编辑/保存/发送docx文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

曾经遇到很多问题.我想在ASP.NET Core服务器上使用OpenXML,我想基于一个模板创建一个新的docx文档.完全保存完此文档后,我希望将其发送给我的客户,以便他可以直接下载.这是我的代码:

Been strugling with a lot of problems. Using OpenXML on a ASP.NET Core server, I want to create a new docx document based on a template one. Once this document is fully saved, I want it to be sent to my client so he can download it directly. Here's my code :

public IActionResult Post([FromBody] Consultant consultant) { using (Stream templateStream = new MemoryStream(Properties.Resources.templateDossierTech)) using (WordprocessingDocument template = WordprocessingDocument.Open(templateStream, false)) { string fileName = environment.WebRootPath + @"\Resources\"+ consultant.FirstName + "_" + consultant.LastName + ".docx"; WordprocessingDocument dossierTechniqueDocument = WordprocessingDocument.Create(fileName, WordprocessingDocumentType.Document); foreach (var part in template.Parts) { dossierTechniqueDocument.AddPart(part.OpenXmlPart, part.RelationshipId); } var body = dossierTechniqueDocument.MainDocumentPart.Document.Body; var paras = body.Elements(); foreach (var para in paras) { foreach (var run in para.Elements()) { foreach (var text in run.Elements()) { if (text.InnerText.Contains("{{prenom}}")) { var t = new Text(text.InnerText.Replace("{{prenom}}", consultant.FirstName)); run.RemoveAllChildren<Text>(); run.AppendChild(t); } } } } dossierTechniqueDocument.MainDocumentPart.Document.Save(); dossierTechniqueDocument.Close(); var cd = new System.Net.Mime.ContentDisposition { FileName = consultant.FirstName + "_" + consultant.LastName + ".docx", Inline = true }; Response.Headers.Add("Content-Disposition", cd.ToString()); Response.Headers.Add("X-Content-Type-Options", "nosniff"); return File(System.IO.File.ReadAllBytes(fileName),"application/vnd.openxmlformats-officedocument.wordprocessingml.document","Dossier Technique"); } }

乍一看,看起来好像保存得很好,但是当我尝试以单词形式打开它时,它说它由于某种原因已损坏. 当我尝试发送它时,这是同样的问题.发送后,我的客户端不会下载它(Ajax查询). 你们当中有人知道如何解决吗?

As a first look, it looks like is saving well but when I try to open it on word, it says that it is corrupted for some reason. That's the same problem when I try to send it. Once it's sent my client doesn't download it (Ajax query). Do anyone of you have any idea how to fix it ?

推荐答案

以下是从模板创建文档的功能:

Here is the function which creates a document from a template:

static void GenerateDocumentFromTemplate(string inputPath, string outputPath) { MemoryStream documentStream; using (Stream stream = File.OpenRead(inputPath)) { documentStream = new MemoryStream((int)stream.Length); CopyStream(stream, documentStream); documentStream.Position = 0L; } using (WordprocessingDocument template = WordprocessingDocument.Open(documentStream, true)) { template.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document); MainDocumentPart mainPart = template.MainDocumentPart; mainPart.DocumentSettingsPart.AddExternalRelationship("schemas.openxmlformats/officeDocument/2006/relationships/attachedTemplate", new Uri(inputPath, UriKind.Absolute)); mainPart.Document.Save(); } File.WriteAllBytes(outputPath, documentStream.ToArray()); }

更多推荐

C#:编辑/保存/发送docx文档

本文发布于:2023-11-10 00:58:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1573925.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:编辑   文档   docx

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!