简介
由于项目需求,需要根据现有的word模板,进行批量生成word报表,为了方便,选用的是 NPOI (NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目)来实现。本次用的版本是NPOI 2.3.0.0,版本不同写法会有差别。
思路
NPOI提供操作word文档的方法也比较简单。
替换模板中关键字的实现思路大致是:
- 获取具有关键字的模板word文档(关键字可以自己定义,需要具有唯一性和可读性);
- 获取文档中的所有段落Paragraphs(表格中的单元格内容也属于段落);
- 遍历段落,找到关键字并进行替换(表格需要先遍历单元格,再遍历单元格中的段落);
- 生成新的文档;
模板实例
本次实例是用VS控制台程序进行测试,需要在项目路径下新建文件夹来存放模板文件和结果文件。
模板文件的存放位置为:…\bin\Debug\Templates,
生成的文件存放位置为:…\bin\Debug\GoalFiles。
实例模板中的关键字有四个:
关键字 | 说明 |
---|---|
{$project} | 项目名称 |
{$Name} | 负责人名字 |
{$Date} | 日期 |
{$Dep} | 部门 |
引入NPOI程序扩展
下载NPOI的DLL包(在此不贴下载链接),在项目中添加引用:
1.ICSharpCode.SharpZipLib.dll
2.NPOI.dll
3.NPOI.OOXML.dll
4.NPOI.OpenXml4Net.dll //根据DONET的版本选择
5.NPOI.OpenXmlFormats.dll
代码实现
右键项目,添加一个WordTemplateHelper类,在其中写方法。
public class WordTemplateHelper
{
/// <summary>
/// NPOI操作word
/// </summary>
/// <param name="TemplatePath">模板路径</param>
/// <param name="SavePath">保存路径</param>
/// <param name="keywords">关键字集合</param>
public static void WriteToPublicationOfResult(string TemplatePath,string SavePath, Dictionary<string, string> keywords)
{
FileStream fs = new FileStream(TemplatePath, FileMode.Open, FileAccess.Read);
XWPFDocument document = new XWPFDocument(fs);
foreach (var table in document.Tables)
{
foreach (