本文介绍了创建docx word文档Web API .NET Core 2.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Asp.net core 2.0中开发一个Web API项目。我需要一种库或创建Word文档的方法。我搜索了尝试过的NPOI和DocX。两者都不如预期。谁能推荐我一个工具?

I am developing a Web API project in Asp.net core 2.0. I am in need of a library or way to create Word document. I have searched an tried NPOI and DocX. Both are not as good as expected. Can anyone suggest me a tool?

推荐答案

乍一看,下面的链接可以提供某种帮助:

At first glance, the below link can help somehow:

反正DOCX-Microsoft使用Open XML SDK的Word文档-您可以使用2.8.1版将Open XML SDK安装到解决方案中。全部免费。

Anyway, about DOCX - Word Document using Open XML SDK by Microsoft - you can install Open XML SDK into your solution using the version 2.8.1. It´s all free.

文档位于:

在GIT上=> ;

在MSDN上=>

ps:MSDN文档都是关于SDK 2.5版本而不是2.8版本的.1,但正如GIT链接中所述,没有实质性更改。

ps: the MSDN documentation is all about the version SDK 2.5 instead of 2.8.1, but as explained in the GIT link there is no substancial changes.

无论如何在Web APP CORE 2.0中使用它,您都可以执行以下操作:

Anyway to use it in a Web APP CORE 2.0 you can do the follow:


  1. 安装Nuget Packgaes版本SDK 2.8.1

  2. 在控制器中引用以下名称空间:

  1. INstall the Nuget Packgaes version SDK 2.8.1
  2. Reference the below namespaces within your controller:

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;


  • 如果只想将其保存在本地文件夹中,请执行以下操作:

  • If you just want to save it in a folder locally do something like:

    public static void CreateWordprocessingDocument(string filepath)
    {
        // Create a document by supplying the filepath.
        using (WordprocessingDocument wordDocument =
            WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document))
        {
            // 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("Create text in body - CreateWordprocessingDocument"));
        }
    }
    


  • 并像这样调用:

     public IActionResult GenerateDocx()
        {
            string filePath = @"c:\word\Invoice.docx";
            CreateWordprocessingDocument(filePath);
        }
    




    1. 如果您想要生成一个docx,然后单击链接,将其从浏览器保存到用户计算机中,请执行以下操作:

    1. If you want to generate a docx to be saved into a users computer from their browsers, after hitting a link, do something like:

    // GET verb
    public IActionResult GenerateDocxBrowser()
    {
    
        // open xml sdk - docx
        using (MemoryStream mem = new MemoryStream())
        {
            using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(mem, DocumentFormat.OpenXml.WordprocessingDocumentType.Document, true))
            {
                wordDoc.AddMainDocumentPart();
                // siga a ordem
                Document doc = new Document();
                Body body = new Body();
    
                // 1 paragrafo
                Paragraph para = new Paragraph();
    
                ParagraphProperties paragraphProperties1 = new ParagraphProperties();
                ParagraphStyleId paragraphStyleId1 = new ParagraphStyleId() { Val = "Normal" };
                Justification justification1 = new Justification() { Val = JustificationValues.Center };
                ParagraphMarkRunProperties paragraphMarkRunProperties1 = new ParagraphMarkRunProperties();
    
                paragraphProperties1.Append(paragraphStyleId1);
                paragraphProperties1.Append(justification1);
                paragraphProperties1.Append(paragraphMarkRunProperties1);
    
                Run run = new Run();
                RunProperties runProperties1 = new RunProperties();
    
                Text text = new Text() { Text = "The OpenXML SDK rocks!" };
    
                // siga a ordem
                run.Append(runProperties1);
                run.Append(text);
                para.Append(paragraphProperties1);
                para.Append(run);
    
                // 2 paragrafo
                Paragraph para2 = new Paragraph();
    
                ParagraphProperties paragraphProperties2 = new ParagraphProperties();
                ParagraphStyleId paragraphStyleId2 = new ParagraphStyleId() { Val = "Normal" };
                Justification justification2 = new Justification() { Val = JustificationValues.Start };
                ParagraphMarkRunProperties paragraphMarkRunProperties2 = new ParagraphMarkRunProperties();
    
                paragraphProperties2.Append(paragraphStyleId2);
                paragraphProperties2.Append(justification2);
                paragraphProperties2.Append(paragraphMarkRunProperties2);
    
                Run run2 = new Run();
                RunProperties runProperties3 = new RunProperties();
                Text text2 = new Text();
                text2.Text = "Teste aqui";
    
                run2.AppendChild(new Break());
                run2.AppendChild(new Text("Hello"));
                run2.AppendChild(new Break());
                run2.AppendChild(new Text("world"));
    
                para2.Append(paragraphProperties2);
                para2.Append(run2);
    
                // todos os 2 paragrafos no main body
                body.Append(para);
                body.Append(para2);
    
                doc.Append(body);
    
                wordDoc.MainDocumentPart.Document = doc;
    
                wordDoc.Close();
            }
            return File(mem.ToArray(), "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "ABC.docx");
        }
    
    }
    


    上面的代码甚至显示了如何使用最重要的对象:主体,段落,运行和文本。记住要始终遵循此顺序!

    the above code even shows how to use the most important objects: body, paragraphs, runs and text. Remember to follow this order always!

    这篇关于创建docx word文档Web API .NET Core 2.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

    08-18 15:19