Github / Gitee
QQ群(1群) : 813100564 / QQ群(2群) : 579033769
视频教学
介绍
MiniWord .NET Word模板引擎,藉由Word模板和数据简单、快速生成文件。

Getting Started
安装
快速入门
模板遵循“所见即所得”的设计,模板和标签的样式会被完全保留- 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 一样(大小写敏感),系统会自动替换字串。
文本
代码例子
- 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类别
代码例子
- var value = new Dictionary<string, object>()
- {
- ["managers"] = new[] { "Jack" ,"Alan"},
- ["employees"] = new[] { "Mike" ,"Henry"},
- };
- MiniWord.SaveAsByTemplate(path, templatePath, value);
复制代码 模版

导出

表格
标签值为 IEmerable类别
代码例子
- 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 = "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 target="_blank" href='https://www.cnblogs.com/api/DownloadWordFromTemplatePath'>DownloadWordFromTemplatePath</a><br>
- <a target="_blank" href='https://www.cnblogs.com/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 在底层 {{}}会被切开变成{{Tag}} 如图片

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |