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模板和数据简单、快速生成文件。
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);
- 输入系统支持模版路径或是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);
模版
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 C#