créer un document word avec Open XML
Je suis entrain de créer un exemple de gestionnaire de générer simple document Word.
Ce document contient le texte Bonjour tout le monde
C'est le code que j'utilise C# .NET 3.5),
J'ai reçu le document Word créé, mais il n'y a aucun texte, la taille est de 0.
Comment puis-je résoudre ce problème?
(J'utilise CopyStream méthode CopyTo est disponible dans .NET 4.0 et au-dessus seulement.)
public class HandlerCreateDocx : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
using (MemoryStream mem = new MemoryStream())
{
//Create Document
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 body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("Hello world!"));
mainPart.Document.Save();
//Stream it down to the browser
context.Response.AppendHeader("Content-Disposition", "attachment;filename=HelloWorld.docx");
context.Response.ContentType = "application/vnd.ms-word.document";
CopyStream(mem, context.Response.OutputStream);
context.Response.End();
}
}
}
//Only useful before .NET 4
public void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[16 * 1024]; //Fairly arbitrary size
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
}
Je recommande d'utiliser le format XML Ouvert la Productivité de l'Outil de débogage de votre document. Également envisager de créer le document dans Word d'abord, puis utiliser l'outil pour vous donner le code qui permettra de créer le document.
OriginalL'auteur Tuyen Nguyen | 2013-04-24
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi, en mettant le streaming du code de l'extérieur à l'AIDE de bloc.
Cela provoque un appel à
WordprocessingDocument.Close
(via la méthode dispose).On peut considérer certains point nous manque ici: Le wordProcessingDocument doivent être fermés avant de les envoyer à flot. Le flux doit être début au début. Merci pour votre solution de postes à ici.
OriginalL'auteur Tuyen Nguyen
J'ai modifié ton code pour le faire fonctionner. Je peux l'ouvrir correctement après avoir enregistrer le télécharger.
Veuillez voir mes modifié ci-dessous. Espérons que cette aide.
OriginalL'auteur Toan Vo
aller à gestionnaire de package nuget et l'installer en premier dans votre projet
OriginalL'auteur Zoyeb Shaikh