Net Core DocXCore 实现word模板导出

实际工作中,往往有这样的需求,需要导出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、表单导出

模板

代码

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

最终效果

2、表格导出

模板

代码

 1     public class TableListTest
 2     {
 3         public static void Test(int count = 10)
 4         {
 5             Console.WriteLine($"表格");
 6             Stopwatch sw = new Stopwatch();
 7             IList<Dictionary<string, object>> data = new List<Dictionary<string, object>>();
 8             for (int i = 0; i < count; i++)
 9             {
10                 Dictionary<string, object> d = new Dictionary<string, object>()
11                 {
12                     { "xm","测试"+i.ToString()},
13                     { "nl",i},
14                     { "xb","男"}
15                 };
16                 data.Add(d);
17             }
18
19             Dictionary<string, object> data1 = new Dictionary<string, object>();
20             data1.Add("list", data);
21             sw.Start();
22             string root = System.AppDomain.CurrentDomain.BaseDirectory;
23             WordHelper.Export(root + Path.Combine("Templates", "temp_table_list.docx"), root + "temp_table_list_out.docx", data1);
24             sw.Stop();
25             var time = sw.ElapsedMilliseconds;
26             Console.WriteLine($"耗时:{time}毫秒");
27         }
28     }

最终效果

3、表单表格混合导出

模板

代码

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

最终效果

4、实例

请看源码

简单说明:

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

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

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

源码下载:

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

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

原文地址:https://www.cnblogs.com/deeround/p/11478610.html

时间: 2024-11-10 20:02:02

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

C#,WPF使用word模板导出word文档

使用word模板导出word文档,首先需要在word模板中插入书签: 根据创建的书签名和位置,将需要写入的内容插入到word文件中. 需要引用  Microsoft.Office.Interop.Word;在添加引用-程序集中搜索可以找到. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Windows; usin

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

先下载jacob.jar包. 解压后将jacob.dll放到windows/system32以下或\jre\bin以下. 将jacob.jar增加项目. 这样项目的环境基本上搭建完毕,接下来就是书写相关的代码: /** * 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段.Value代表用来替换的值. * word模板中全部要替换的字段(即HashMap中的Key)以特殊字符开头和结尾. * 如:$code$.$date$--.以免执行错误的替换. * 全部要替换为图片

根据word模板导出,替换

using System; using System.Collections.Generic; using System.Linq; using System.Text; using xyxx_base.Models; using istrong.db; using Aspose.Words; using System.IO; using System.Configuration; namespace xyxx_base.Common { public static class WordHelp

使用Spire.Doc组件利用模板导出Word文档

以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作,有NPOI,Spire等第三方组件.开始考虑的是NPOI,毕竟它在操作Excel方面还是很强大的:但是不知道是它本身没有,还是我没找到,无法实现利用Word模板的标签插入内容,纯靠代码去生成Word文档,排版是个大问题.最终找到了Spire.Doc组件,轻松实现! Spire的官网地址:https:

poi导出word模板项目实例(一个文件)

在页面上填写值,然后导出到word模板中,并把页面上的值带到模板中,也就是导出word文档,提前有word 的模板形式, 1.jsp 页面   <table class="formTable"> <TR> <TD class="label">会议地点</TD> <TD class="content"> <INPUT id="meetingSite" type=&

使用java Apache poi 根据word模板生成word报表

项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一些复杂的表格做不了,但是已经基本满足项目需求了. 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https://download.csdn.net/download/u012775558/10306308 注意,仅支持docx

[转]C#操作word模板插入文字、图片及表格详细步骤

c#操作word模板插入文字.图片及表格 1.建立word模板文件 person.dot用书签 标示相关字段的填充位置 2.建立web应用程序 加入Microsoft.Office.Interop.Word引用具体添加引用请参看http://www.microsoft.com/china/msdn/library/office/office/OfficePrIntopAssFAQ.mspx?mfr=true 3.相关示例代码 protected void CreateReport_Click(o

JXLS模板导出EXCEL

最近做要做一些报表导出的功能,由于表格内容比较复杂,直接生成excel比较麻烦,所以采用模板的方式来做,可惜自己不了解,也证明了自己技术有多差!通过多次资料,终于找到了适合自己的方法.特此记录,方便以后查找. maven用到的包  <dependency>     <groupId>net.sf.jxls</groupId>     <artifactId>jxls-core</artifactId>     <version>1.0

利用POI 技术动态替换word模板内容

项目中需要实现一个功能,动态替换给定模板里面的内容,生成word文档提供下载功能. 中间解决了问题有: 1.页眉的文档logo图片解决,刚开始的时候,HWPFDocument 对象无法读取图片对象(已测试) 2.文档的水印也无法读取 3.下载的乱码问题(火狐浏览器) 4.将文档中的阿拉伯数字的金额改为中文繁体显示 具体代码如下: /** * 拍卖结算之后,进行成交确认书的下载操作方法 * * @param id * @param response */ @RequestMapping(value