龙空技术网

NET Word模板引擎,藉由Word模板和数据简单、快速生成文件

中年农码工 591

前言:

今天朋友们对“net调用word模板”大约比较讲究,咱们都需要学习一些“net调用word模板”的相关知识。那么小编同时在网摘上汇集了一些关于“net调用word模板””的相关知识,希望各位老铁们能喜欢,姐妹们一起来学习一下吧!

MiniWord .NET Word模板引擎,藉由Word模板和数据简单、快速生成文件。

Getting Started安装nuget link : Packge xml <PackageReference Include="MiniWord" Version="0.4.0" />Or .NET CLI : dotnet add package MiniWord --version 0.4.0快速入门

模板遵循“所见即所得”的设计,模板和标签的样式会被完全保留

var value = new Dictionary<string, object>(){["title"] = "Hello MiniWord"};MiniSoftware.MiniWord.SaveAsByTemplate(outputPath, templatePath, value);
输入、输出输入系统支持模版路径或是Byte[]输出支持文件路径、Byte[]、Stream
SaveAsByTemplate(string path, string templatePath, Dictionary<string, object> value)SaveAsByTemplate(string path, byte[] templateBytes, Dictionary<string, object> value)SaveAsByTemplate(this Stream stream, string templatePath, Dictionary<string, object> value)SaveAsByTemplate(this Stream stream, byte[] templateBytes, Dictionary<string, object> value)
标签

MiniWord 使用类似 Vue, React 的模版字串 {{tag}},只需要确保 tag 与 value 参数的 key 一样(大小写敏感),系统会自动替换字串。

文本

{{tag}}
代码例子
var value = new Dictionary<string, object>(){    ["Name"] = "Jack",    ["Department"] = "IT Department",    ["Purpose"] = "Shanghai site needs a new system to control HR system.",    ["StartDate"] = DateTime.Parse("2022-09-07 08:30:00"),    ["EndDate"] = DateTime.Parse("2022-09-15 15:30:00"),    ["Approved"] = true,    ["Total_Amount"] = 123456,};MiniWord.SaveAsByTemplate(path, templatePath, value);
模版导出图片

标签值为 MiniWordPicture 类别

代码例子

var value = new Dictionary<string, object>(){    ["Logo"] = new MiniWordPicture() { Path= PathHelper.GetFile("DemoLogo.png"), Width= 180, Height= 180 }};MiniWord.SaveAsByTemplate(path, templatePath, value);
模版导出列表

标签值为 string[] 或是 IList<string>类别

代码例子

var value = new Dictionary<string, object>(){    ["managers"] = new[] { "Jack" ,"Alan"},    ["employees"] = new[] { "Mike" ,"Henry"},};MiniWord.SaveAsByTemplate(path, templatePath, value);
模版导出表格

标签值为 IEmerable<Dictionary<string,object>>类别

代码例子

var value = new Dictionary<string, object>(){    ["TripHs"] = new List<Dictionary<string, object>>    {        new Dictionary<string, object>        {            { "sDate",DateTime.Parse("2022-09-08 08:30:00")},            { "eDate",DateTime.Parse("2022-09-08 15:00:00")},            { "How","Discussion requirement part1"},            { "Photo",new MiniWordPicture() { Path = PathHelper.GetFile("DemoExpenseMeeting02.png"), Width = 160, Height = 90 }},        },        new Dictionary<string, object>        {            { "sDate",DateTime.Parse("2022-09-09 08:30:00")},            { "eDate",DateTime.Parse("2022-09-09 17:00:00")},            { "How","Discussion requirement part2 and development"},            { "Photo",new MiniWordPicture() { Path = PathHelper.GetFile("DemoExpenseMeeting01.png"), Width = 160, Height = 90 }},        },    }};MiniWord.SaveAsByTemplate(path, templatePath, value);
模版导出其他POCO or dynamic 参数

v0.5.0 支持 POCO 或 dynamic parameter

var value = new { title = "Hello MiniWord" };MiniWord.SaveAsByTemplate(outputPath, templatePath, value);
字体FontColor和HighlightColor
var value = new{    Company_Name = new MiniWordColorText { Text = "MiniSofteware", FontColor = "#eb70AB" },    Name = new MiniWordColorText { Text = "Jack", HighlightColor = "#eb70AB" },    CreateDate = new MiniWordColorText { Text = new DateTime(2021, 01, 01).ToString(), HighlightColor = "#eb70AB", FontColor = "#ffffff" },    VIP = true,    Points = 123,    APP = "Demo APP",};
HyperLink

我们可以尝试使用 MiniWodrHyperLink 类,用模板测试替换为超链接。

MiniWordHyperLink 提供了两个主要参数。

Url: HyperLink URI 目标路径文字:超链接文字

var value = new {    ["Name"] = new MiniWordHyperLink(){        Url = ";,        Text = "測試連結!!"    },    ["Company_Name"] = "MiniSofteware",    ["CreateDate"] = new DateTime(2021, 01, 01),    ["VIP"] = true,    ["Points"] = 123,    ["APP"] = "Demo APP",};MiniWord.SaveAsByTemplate(path, templatePath, value);
例子ASP.NET Core 3.1 API Export
using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using System;using System.Collections.Generic;using System.IO;using System.Net;using MiniSoftware;public class Program{    public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();    public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());}public class Startup{    public void ConfigureServices(IServiceCollection services) => services.AddMvc();    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)    {        app.UseStaticFiles();        app.UseRouting();        app.UseEndpoints(endpoints =>        {            endpoints.MapControllerRoute(                name: "default",                pattern: "{controller=api}/{action=Index}/{id?}");        });    }}public class ApiController : Controller{    public IActionResult Index()    {        return new ContentResult        {            ContentType = "text/html",            StatusCode = (int)HttpStatusCode.OK,            Content = @"<html><body><a href='api/DownloadWordFromTemplatePath'>DownloadWordFromTemplatePath</a><br><a href='api/DownloadWordFromTemplateBytes'>DownloadWordFromTemplateBytes</a><br></body></html>"        };    }    static Dictionary<string, object> defaultValue = new Dictionary<string, object>()    {        ["title"] = "FooCompany",        ["managers"] = new List<Dictionary<string, object>> {            new Dictionary<string, object>{{"name","Jack"},{ "department", "HR" } },            new Dictionary<string, object> {{ "name", "Loan"},{ "department", "IT" } }        },        ["employees"] = new List<Dictionary<string, object>> {            new Dictionary<string, object>{{ "name", "Wade" },{ "department", "HR" } },            new Dictionary<string, object> {{ "name", "Felix" },{ "department", "HR" } },            new Dictionary<string, object>{{ "name", "Eric" },{ "department", "IT" } },            new Dictionary<string, object> {{ "name", "Keaton" },{ "department", "IT" } }        }    };    public IActionResult DownloadWordFromTemplatePath()    {        string templatePath = "TestTemplateComplex.docx";        Dictionary<string, object> value = defaultValue;        MemoryStream memoryStream = new MemoryStream();        MiniWord.SaveAsByTemplate(memoryStream, templatePath, value);        memoryStream.Seek(0, SeekOrigin.Begin);        return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")        {            FileDownloadName = "demo.docx"        };    }    private static Dictionary<string, Byte[]> TemplateBytesCache = new Dictionary<string, byte[]>();    static ApiController()    {        string templatePath = "TestTemplateComplex.docx";        byte[] bytes = System.IO.File.ReadAllBytes(templatePath);        TemplateBytesCache.Add(templatePath, bytes);    }    public IActionResult DownloadWordFromTemplateBytes()    {        byte[] bytes = TemplateBytesCache["TestTemplateComplex.docx"];        Dictionary<string, object> value = defaultValue;        MemoryStream memoryStream = new MemoryStream();        MiniWord.SaveAsByTemplate(memoryStream, bytes, value);        memoryStream.Seek(0, SeekOrigin.Begin);        return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")        {            FileDownloadName = "demo.docx"        };    }}
常见问题模版字串没有生效

建议 {{tag}} 复制重新整串复制贴上,有时打字 word 在底层 {{}}会被切开变成<w:t>{</w:t><w:t>{<w:/t><w:t>Tag</w:t><w:t>}</w:t><w:t>}<w:/t> 如图片

标签: .NET, C#,

标签: #net调用word模板 #net图片导出word