快捷搜索:  汽车  科技

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)MiniWordHyperLink 提供了两个主要参数。var value = new { title = "Hello MiniWord" }; MiniWord.SaveAsByTemplate(outputPath templatePath value); 字体FontColor和HighlightColorvar value = new { Company_Name = new MiniWordColorText { Text = "MiniSofteware" FontColor = "#eb70AB" } Name = new MiniWordColorText { Text = "Jack" HighlightColor = "#eb70AB" } Create

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

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(1)

Getting Started安装
  • nuget link : https://www.nuget.org/packages/MiniWord
  • 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);

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(2)

输入、输出
  • 输入系统支持模版路径或是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); 模版

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(3)

导出

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(4)

图片

标签值为 MiniWordPicture 类别

代码例子

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

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(5)

导出

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(6)

列表

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

代码例子

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

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(7)

导出

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(8)

表格

标签值为 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); 模版

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(9)

导出

net编辑工具(NETWord模板引擎藉由Word模板和数据简单)(10)

其他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 = "https://google.com" 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编辑工具(NETWord模板引擎藉由Word模板和数据简单)(11)

标签: .NET C#

猜您喜欢: