C# MVC 4: Create Word Document and download without saving in disk

14,336

Using the library that Robert Harvey recommended DocX.dll (thank you, gentleman), this would be the solution:

using Novacode;
using System.Drawing;

.
.
.

public ActionResult Generar(Documento documento)
{
    MemoryStream stream = new MemoryStream();
    DocX doc = DocX.Create(stream);

    Paragraph par = doc.InsertParagraph();
    par.Append("This is a dummy test").Font(new FontFamily("Times New Roman")).FontSize(32).Color(Color.Blue).Bold();

    doc.Save();

    return File(stream.ToArray(), "application/octet-stream", "FileName.docx");
}

I couldn't find the solution using Microsoft.Office.Interop.Word (something so simple, i'm disappointed).

Thank you again to Robert and hope this example helps you solve the problem.

Share:
14,336
prueba prueba
Author by

prueba prueba

Updated on June 25, 2022

Comments

  • prueba prueba
    prueba prueba almost 2 years

    This probably has a very simple answer but i just can't find it.

    I have a project using C# MVC 4 using Microsoft.Office.Interop.Word 12

    In an action I try to dynamically create a Word file (using a database for the information) and then i want to download it. The file does not exist (it is created from scratch) and I don't want to save it in disk (it does not need to be saved because its content is dynamic).

    This is the code for now:

    public ActionResult Generar(Documento documento)
    {
        Application word = new Application();
        word.Visible = false;
    
        object miss = System.Reflection.Missing.Value;
        Document doc = word.Documents.Add(ref miss, ref miss, ref miss, ref miss);
    
        Paragraph par = doc.Content.Paragraphs.Add(ref miss);
        object style = "Heading 1";
        par.Range.set_Style(ref style);
        par.Range.Text = "This is a dummy test";
    
        byte[] bytes = null;  // This is the part i need to get the bytes of the doc object
        doc.Close();
    
        word.Quit();
    
        return File(bytes, "application/octet-stream", "NewFile.docx");
    }
    
  • Nithin Paul
    Nithin Paul about 9 years
    I was also looking for Microsoft.Office.Interop.Word solution to do this same. :(