实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出。

实现以下几个需求:

1、表单导出

2、表格导出

3、表单表格混合导出

4、实际用例测试

解决方案:

实现是基于NET Core 2.1 ,搜索了各个开源项目最终基于DocX这个开源库,当初实现时发现DocX作者并没有发布Core的版本,最后在Nuget搜索到DocXCore这个包,但是没有GitHub搜索到这个库。

上面还遇到一个坑爹的问题,系统在win运行没问题,一部署到centos导出就挂了,根据错误研究发现里面居然要获取当前登录的用户信息,win系统没有问题,centos报错,于是去掉获取系统用户这块,居然没有源码。

一怒之下,反编译了DocXCore包,移除了获取登录系统代码,最终win和centos都导出正常。

奉上源码地址:https://github.com/deeround/DocXCore

1、表单导出

模板

代码

     public class FormTest
{
public static void Test()
{
Console.WriteLine($"表单");
Stopwatch sw = new Stopwatch();
Dictionary<string, object> data = new Dictionary<string, object>()
{
{ "xmmc","测试姓名测试姓名111"},
{ "sqje","1417.4"},
{ "xmdw","博客园Deeround"},
{ "glfs","自行管理方式"},
{ "xmgk","博客园Deeround来函申请办理 应急抢险治理工程项目竣工结(决)算,该项目已完工并通过项目初步验收,现拟按程序采取政府购买服务方式开展评审"},
{ "psyj",""},
{ "gzyq", @"(一)对建设程序进行评审,包括可行性研究报告、初步设计等批准文件的程序性审查。
(二)对建设规模、建设标准、可研执行情况等进行评审。
(三)对工程投资进行评审,包括工程计量、定额选用、材料价格及费用标准等的评审。
(四)对设施设备资进行评审,包括设施设备型号、规格、数量及价格的评审。
"},
{ "wcsx","1. 收到委托书后在10天内报送评审方案,评审完成后需提交评审报告纸质件7份及电子文档。"},
{ "ywcs","伯爵二元"},
{ "lxr","千年 12345678"},
}; sw.Start();
string root = System.AppDomain.CurrentDomain.BaseDirectory;
WordHelper.Export(root + Path.Combine("Templates", "temp_form.docx"), root + "temp_form_out.docx", data);
sw.Stop();
var time = sw.ElapsedMilliseconds;
Console.WriteLine($"耗时:{time}毫秒");
}
}

最终效果

2、表格导出

模板

代码

     public class TableListTest
{
public static void Test(int count = )
{
Console.WriteLine($"表格");
Stopwatch sw = new Stopwatch();
IList<Dictionary<string, object>> data = new List<Dictionary<string, object>>();
for (int i = ; i < count; i++)
{
Dictionary<string, object> d = new Dictionary<string, object>()
{
{ "xm","测试"+i.ToString()},
{ "nl",i},
{ "xb","男"}
};
data.Add(d);
} Dictionary<string, object> data1 = new Dictionary<string, object>();
data1.Add("list", data);
sw.Start();
string root = System.AppDomain.CurrentDomain.BaseDirectory;
WordHelper.Export(root + Path.Combine("Templates", "temp_table_list.docx"), root + "temp_table_list_out.docx", data1);
sw.Stop();
var time = sw.ElapsedMilliseconds;
Console.WriteLine($"耗时:{time}毫秒");
}
}

最终效果

3、表单表格混合导出

模板

代码

 public class FormTableTest
{
public static void Test()
{
Console.WriteLine($"表单表格混合");
Stopwatch sw = new Stopwatch();
Dictionary<string, object> data = new Dictionary<string, object>()
{
{ "xmmc","测试姓名测试姓名111"},
{ "sqje","1417.4"},
{ "xmdw","博客园Deeround"},
{ "glfs","自行管理方式"},
{ "xmgk","博客园Deeround来函申请办理 应急抢险治理工程项目竣工结(决)算,该项目已完工并通过项目初步验收,现拟按程序采取政府购买服务方式开展评审"},
{ "psyj",""},
{ "gzyq", @"(一)对建设程序进行评审,包括可行性研究报告、初步设计等批准文件的程序性审查。
(二)对建设规模、建设标准、可研执行情况等进行评审。
(三)对工程投资进行评审,包括工程计量、定额选用、材料价格及费用标准等的评审。
(四)对设施设备资进行评审,包括设施设备型号、规格、数量及价格的评审。
"},
{ "wcsx","1. 收到委托书后在10天内报送评审方案,评审完成后需提交评审报告纸质件7份及电子文档。"},
{ "ywcs","测试处"},
{ "lxr","李 123456"},
};
//明细数据
IList<Dictionary<string, object>> mx = new List<Dictionary<string, object>>();
for (int i = ; i < ; i++)
{
mx.Add(new Dictionary<string, object>() {
{ "a",i},
{ "b","项目概况表项目概况表项目概况表项目概况表项目概况表"},
{ "c","评审中"},
});
}
data.Add("mx", mx);
sw.Start();
string root = System.AppDomain.CurrentDomain.BaseDirectory;
WordHelper.Export(root + Path.Combine("Templates", "temp_form_table.docx"), root + "temp_form_table_out.docx", data);
sw.Stop();
var time = sw.ElapsedMilliseconds;
Console.WriteLine($"耗时:{time}毫秒");
}
}

最终效果

4、实例

请看源码

简单说明:

采用字符串模板方式替换形式,之前也用过其他方式设置参数,多多少少会遇到些坑,还不如自定义字符串灵活。

#:普通表单关键字使用#包裹

$:表格关键字使用$包裹,里面使用.分割

源码下载:

DocXCore源码地址: https://github.com/deeround/DocXCore

上面demo源码:https://files.cnblogs.com/files/deeround/WordExportDemo.zip

Net Core DocXCore 实现word模板导出的更多相关文章

  1. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?

    前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...

  2. .net core 使用NPOI填充Word模板导出Word

    最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...

  3. 8、jeecg 笔记之 自定义word 模板导出(一)

    1.前言 jeecg 中已经自带 word 的导出导出功能,其所使用的也是 easypoi,尽管所导出的 word 能满足大部分需求, 但总是有需要用到自定义 word导出模板,下文所用到的皆是 ea ...

  4. word模板导出的几种方式:第一种:占位符替换模板导出(只适用于word中含有表格形式的)

    1.占位符替换模板导出(只适用于word中含有表格形式的): /// <summary> /// 使用替换模板进行到处word文件 /// </summary> public ...

  5. 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

    https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...

  6. C# 使用Word模板导出数据

    使用NPOI控件导出数据到Word模板中方式: 效果如下: Word模板: 运行结果: 实现如下: Student.cs using System; using System.Collections. ...

  7. OpenXml Sdk 根据Word模板导出到word

    一:OpenXml Sdk 简介 Open XML标准的简单介绍:Ecma Office Open XML(“Open XML”)是针对字处理文档.演示文稿和电子表格的国际化开放标准,可免费供多个应用 ...

  8. word模板导出的几种方式:第三种:标签替换(DocX组件读取与写入Word)

    dll文件下载地址:https://files-cdn.cnblogs.com/files/daizhipeng/DocX.rar DocX wordDocumentOld = DocX.Load(S ...

  9. java根据word模板导出word文件

    1.word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量 2.将word文档另存为xml文件.编辑如下图,找到填写的占位,修改为${bcrxm}格式 3.将文件后缀名改为.ftl文 ...

随机推荐

  1. 关于python中的特殊方法

    研究了几个小时,大概对python中的特殊方法一知半解,现在写写自己的理解,以及记录一些找到的资源.待自己有比较深入理解的时候,再来更新 https://docs.python.org/3/refer ...

  2. 夯实Java基础(十三)——字符串

    字符串应该是我们在Java中用的最频繁.最多的,可见字符串对于我们来说是多么的重要,所以我们非常有必要去深入的了解一下. 1.String String就代表字符串,在Java中字符串属于对象.我们刚 ...

  3. vue+Elment-UI,修改element组件样式

    在用vue开发项目过程中,我们总是避免不了的会使用到elementUI,它里面提供的一些组件都为我们的开发带来了很大的便利,但是,当有时候我们需要使用这些组件的同时又要修改下组件的UI样式的话,我们该 ...

  4. 微服务SpringCloud之Spring Cloud Config配置中心SVN

    在回来的路上看到一个个的都抱着花,吃了一路的狗粮,原本想着去旁边的工业园里跑跑步呢,想想还是算了,人家过七夕,俺们过巴西.上一博客学习了Spring Cloud Config使用git作为配置中心,本 ...

  5. 用CSS来定义<p>标签,要求实现以下效果:字体颜色再IE6下为黑色,IE7下为红色,IE8下为绿色,其他浏览器下为黄色。

    <!DOCTYPE html><html><head><meta charset="utf-8"><meta name=&qu ...

  6. iOS的录屏功能

    iOS的录屏功能其实没什么好说的,因为网上的教程很多,但是网上的Demo无一例外几乎都有一个bug,那就是iPad上会出现闪退,这也体现了国内的教程文档的一个特点,就是抄袭,教程几乎千篇一律,bug也 ...

  7. DIY cnblog——背景渐变切换

    进来的小伙伴应该已经看过了我的博客样式,但还是贴张图先: 先大致说一下实现的思路,然后把代码贴出来供小伙伴们参考. 由于不是特别技术性的文章,格式就放宽松一点,跟着意识流走吧. 先跟大家分享一个渐变背 ...

  8. springboot整合websocket高级版

    目录 sockjs介绍 产生的原因 环境搭建 springboot整合sockjs 使用场景 聊天室开发 点对点通信 群聊 效果 总结 加入战队 微信公众号 上一章节我们说了websocket的优缺点 ...

  9. 带你剖析WebGis的世界奥秘----点和线的世界

    前言 昨天写了好久的博文我没保存,今天在来想继续写居然没了,气死人啊这种情况你们见到过没,所以今天重新写,我还是切换到了HTML格式的书写上.废话不多说了,我们现在就进入主题,上周我仔细研究了WebG ...

  10. 使用appscan安全扫描问题以及解决办法

    最近在做安全扫描,把遇到的一些问题以及一些解决方法记录下,以备后用. 扫描软件: IBM Security AppScan Standard  规则: 17441 1. 已解密的登录请求 (高) - ...