web-dev-qa-db-ja.com

docxWordドキュメントwebapi .net core2.0を作成します

Asp.netコア2.0でWebAPIプロジェクトを開発しています。 Word文書を作成するためのライブラリまたは方法が必要です。試したNPOIとDocXを検索しました。どちらも期待したほど良くありません。誰かが私にツールを提案できますか?

一見すると、以下のリンクが何らかの形で役立ちます。

https://asp.net-hacker.rocks/2017/02/23/Word-document-formatter-in-aspnetcore.html

とにかく、DOCX(MicrosoftによるOpen XML SDKを使用したWord文書)については、バージョン2.8.1を使用してOpen XMLSDKをソリューションにインストールできます。それはすべて無料です。

入手可能なドキュメント:

GITの場合=> https://github.com/OfficeDev/Open-XML-SDK ;

MSDNの場合=> https://docs.Microsoft.com/en-us/office/open-xml/open-xml-sdk

ps:MSDNのドキュメントはすべて2.8.1ではなくバージョンSDK 2.5に関するものですが、GITリンクで説明されているように、実質的な変更はありません。

とにかく、Web APP CORE 2.0で使用するには、次のようにします。

  1. NugetPackgaesバージョンSDK2.8.1をインストールします
  2. コントローラ内で以下の名前空間を参照してください。

    using DocumentFormat.OpenXml;
    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Wordprocessing;
    
  3. ローカルのフォルダに保存したいだけの場合は、次のようにします。

    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を生成する場合は、リンクをクリックした後、次のようにします。

    // 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");
        }
    
    }
    

上記のコードは、本文、段落、ラン、テキストなどの最も重要なオブジェクトの使用方法も示しています。常にこの順序に従うことを忘れないでください!

8
BerBar