本文转载:http://www.cnblogs.com/yanweidie/p/3861482.html

由于上周工作比较繁忙,所以这篇文章等了这么久才写(预告一下,下一个章节正式进入NVelocity篇,到时会讲解怎么使用NVelocity做一款简易的代码生成器,敬请期待!),好了正式进入本篇内容。

  这篇会介绍DocX读写WORD,DocX组件功能强大,可以很容易的读写WORD,相对于NPOI强大很多,性能也好很多,做这个工具之所以会选择这个组件,主要是看重该组件的表格合并功能。

使用模版生成简历

下面将以一个简历实例来讲解DocX对表格的操作,先看看生成的效果

 private static void CreateResume()
{
DocX doc;
try
{
doc = DocX.Load(@"ResumeTemplate.docx");
//给域赋值
if (doc.Tables != null && doc.Tables.Count > 0)
{
Table table=doc.Tables[0];
//姓名
table.Rows[1].Cells[1].Paragraphs[0].Append("DocX");
//姓名
table.Rows[1].Cells[3].Paragraphs[0].Append("未婚"); //出生
table.Rows[2].Cells[1].Paragraphs[0].Append("2010-09-19");
//政治面貌
table.Rows[2].Cells[3].Paragraphs[0].Append("团员"); //性别
table.Rows[3].Cells[1].Paragraphs[0].Append("男");
//民族
table.Rows[3].Cells[3].Paragraphs[0].Append("汉族"); //学位
table.Rows[4].Cells[1].Paragraphs[0].Append("大学本科");
//移动电话
table.Rows[4].Cells[3].Paragraphs[0].Append("13567890987"); //专业
table.Rows[5].Cells[1].Paragraphs[0].Append("软件工程");
//邮箱
table.Rows[5].Cells[3].Paragraphs[0].Append("2345678@qq.com"); //地址
table.Rows[6].Cells[1].Paragraphs[0].Append("故宫"); //照片
Novacode.Image image = doc.AddImage(@"logo.jpg");
Picture picture = image.CreatePicture();
table.Rows[1].Cells[4].InsertParagraph().AppendPicture(picture); //教育背景
table.Rows[8].Cells[0].Paragraphs[0].Append("2011-2013");
table.Rows[8].Cells[1].Paragraphs[0].Append("小学"); //主修课程
table.Rows[10].Cells[0].Paragraphs[0].Append("数据结构,C语言,算法,C++"); //个人能力
table.Rows[12].Cells[0].Paragraphs[0].Append("熟练掌握DocX操作Word,SQL能力强悍"); //计算机能力
table.Rows[14].Cells[0].Paragraphs[0].Append("高级软件工程师"); //外语水平
table.Rows[16].Cells[0].Paragraphs[0].Append("CET-4,CET-6"); //奖励情况
table.Rows[18].Cells[0].Paragraphs[0].Append("1999年几月 曾获优秀班干部,3等奖学金1999年几月 曾获校优秀干部,学生会先进集体,2等奖学金20**年几月 曾获优秀学习委员,网络技术协会负责人,……………………"); //自我评价
table.Rows[20].Cells[0].Paragraphs[0].Append("本人性格开朗、稳重、有活力,待人热情、真诚;工作认真负责,积极主动,能吃苦耐劳,用于承受压力,勇于创新;有很强的组织能力和团队协作精神,具有较强的适应能力;纪律性强,工作积极配合;意志坚强,具有较强的无私奉献精神。"); }
doc.SaveAs(@"DocXResume.docx");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

上面的代码从模版表格中写入指定数据,生成的最终简历,操作很简单。Demo下载地址

读写表格数据

         上面的例子是想表格中写入数据,那么读取数据的操作可以类比出来,也是很简单的这里就不多介绍了,工具里面创建表格写入数据的代码贴出来,供大家参考。

  /// <summary>
/// 根据读取的表信息导出WORD文档
/// </summary>
/// <param name="list">表信息集合</param>
/// <param name="strExportPath">导出路径</param>
public static void CreateWord(List<TableInfo> list, string strExportPath, BackgroundWorker bw)
{
int fontSize = 9;
using (DocX doc = DocX.Create(strExportPath, DocumentTypes.Document))
{
int proc = 1;
foreach (TableInfo t in list)
{
Paragraph p1 = doc.InsertParagraph();
p1.AppendLine(string.IsNullOrEmpty(t.Name) ? t.Code : t.Name + "\n").Bold(); Table table = doc.AddTable(t.ListColumnInfo.Count + 4, 11);
table.Design = TableDesign.TableGrid;
table.Alignment = Alignment.center; List<Row> rows = table.Rows;
Row row0 = rows[0];
row0.MergeCells(0, 1);
row0.Cells[0].Paragraphs[0].Append("数据表中文名称").FontSize(fontSize);
row0.MergeCells(1, 2);
row0.Cells[1].Paragraphs[0].Append(t.Name).FontSize(fontSize);
row0.MergeCells(2, 4);
row0.Cells[2].Paragraphs[0].Append("修改说明").FontSize(fontSize);
row0.MergeCells(3, 6);
row0.Cells[3].Paragraphs[0].Append(t.IsUpdate ? "调整" : "新增").FontSize(fontSize).Color(t.IsUpdate ? Color.Red : Color.Blue); row0.Cells[0].Width = 143;
row0.Cells[1].Width = 211;
row0.Cells[2].Width = 127;
row0.Cells[3].Width = 149;
row0.Height = 25; Row row1 = rows[1];
row1.MergeCells(0, 1);
row1.Cells[0].Paragraphs[0].Append("数据表英文名称").FontSize(fontSize);
row1.MergeCells(1, 9);
row1.Cells[1].Paragraphs[0].Append(t.Code).FontSize(fontSize);
row1.Cells[0].Width = 143;
row1.Cells[1].Width = 487;
row1.Height = 25; Row row2 = rows[2];
row2.MergeCells(0, 1);
row2.Cells[0].Paragraphs[0].Append("功能简述").FontSize(fontSize);
row2.MergeCells(1, 9);
row2.Cells[1].Paragraphs[0].Append("").FontSize(fontSize);
row2.Cells[0].Width = 143;
row2.Cells[1].Width = 487;
row2.Height = 25; Row row3 = rows[3];
row3.Cells[0].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[1].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[2].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[3].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[4].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[5].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[6].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[7].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[8].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[9].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[10].FillColor = Color.FromArgb(226, 226, 226);
row3.Cells[0].Width = 35;
row3.Cells[1].Width = 108;
row3.Cells[2].Width = 116;
row3.Cells[3].Width = 95;
row3.Cells[4].Width = 51;
row3.Cells[5].Width = 36;
row3.Cells[6].Width = 40;
row3.Cells[7].Width = 35;
row3.Cells[8].Width = 40;
row3.Cells[9].Width = 39;
row3.Cells[10].Width = 35; row3.Cells[0].Paragraphs[0].Append("序号").Bold().FontSize(fontSize);
row3.Cells[1].Paragraphs[0].Append("字段中文名").Bold().FontSize(fontSize);
row3.Cells[2].Paragraphs[0].Append("字段英文名").Bold().FontSize(fontSize);
row3.Cells[3].Paragraphs[0].Append("数据类型").Bold().FontSize(fontSize);
row3.Cells[4].Paragraphs[0].Append("宽度").Bold().FontSize(fontSize);
row3.Cells[5].Paragraphs[0].Append("约束").Bold().FontSize(fontSize);
row3.Cells[6].Paragraphs[0].Append("默认值").Bold().FontSize(fontSize);
row3.Cells[7].Paragraphs[0].Append("空值").Bold().FontSize(fontSize);
row3.Cells[8].Paragraphs[0].Append("枚举&说明").Bold().FontSize(fontSize);
row3.Cells[9].Paragraphs[0].Append("自增").Bold().FontSize(fontSize);
row3.Cells[10].Paragraphs[0].Append("修改说明").Bold().FontSize(fontSize); Row row = null;
ColumnInfo info = null;
for (int i = 0; i < t.ListColumnInfo.Count; i++)
{
row = rows[i + 4];
info = t.ListColumnInfo[i];
row.Cells[0].Paragraphs[0].Append(info.Sequence.ToString()).FontSize(fontSize);
row.Cells[1].Paragraphs[0].Append(info.Name).FontSize(fontSize);
row.Cells[2].Paragraphs[0].Append(info.Code).FontSize(fontSize);
row.Cells[3].Paragraphs[0].Append(info.DataType).FontSize(fontSize);
row.Cells[4].Paragraphs[0].Append(info.Width).FontSize(fontSize);
row.Cells[5].Paragraphs[0].Append(info.PK ? "PK" : "").FontSize(fontSize);
row.Cells[6].Paragraphs[0].Append(info.DefaultValue).FontSize(fontSize);
row.Cells[7].Paragraphs[0].Append(info.Nullable ? "" : "N").FontSize(fontSize);
row.Cells[8].Paragraphs[0].Append("").FontSize(fontSize);
row.Cells[9].Paragraphs[0].Append(info.Identity ? "Y" : "").FontSize(fontSize);
row.Cells[10].Paragraphs[0].Append("").FontSize(fontSize); row.Cells[0].Width = 35;
row.Cells[1].Width = 108;
row.Cells[2].Width = 116;
row.Cells[3].Width = 95;
row.Cells[4].Width = 51;
row.Cells[5].Width = 36;
row.Cells[6].Width = 40;
row.Cells[7].Width = 35;
row.Cells[8].Width = 40;
row.Cells[9].Width = 39;
row.Cells[10].Width = 35; row.Height = 35;
}
p1.InsertTableAfterSelf(table);
bw.ReportProgress(proc * 100 / list.Count, "Process");
proc++;
}
doc.Save();
}
}

合并单元格

  

DocX使用MergeCells方法就可以合并单元格了

 List<Row> rows = table.Rows;
Row row0 = rows[0];
row0.MergeCells(0, 1);
row0.Cells[0].Paragraphs[0].Append("数据表中文名称").FontSize(fontSize);
row0.MergeCells(1, 2);
row0.Cells[1].Paragraphs[0].Append(t.Name).FontSize(fontSize);
row0.MergeCells(2, 4);
row0.Cells[2].Paragraphs[0].Append("修改说明").FontSize(fontSize);
row0.MergeCells(3, 6);
row0.Cells[3].Paragraphs[0].Append(t.IsUpdate ? "调整" : "新增").FontSize(fontSize).Color(t.IsUpdate ? Color.Red : Color.Blue);

DocX组件读取与写入Word的更多相关文章

  1. 数据字典生成工具之旅(5):DocX组件读取与写入Word

    由于上周工作比较繁忙,所以这篇文章等了这么久才写(预告一下,下一个章节正式进入NVelocity篇,到时会讲解怎么使用NVelocity做一款简易的代码生成器,敬请期待!),好了正式进入本篇内容. 这 ...

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

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

  3. Spire.Doc组件读取与写入Word

    之前写了一篇开源组件DocX读写word的文章,当时时间比较匆忙选了这个组件,使用过程中还是有些不便,不能提前定义好模版,插入Form表单域进行替换.最近无意中发现Spire.Doc组件功能很强大,目 ...

  4. [php]在PHP中读取和写入WORD文档的代码

    测试平台windows 使用的windows的com主键. <? // 建立一个指向新COM组件的索引 $word = new COM("word.application") ...

  5. Docx组件读写Word文档介绍

    Docx介绍 官方原文:DocX is a .NET library that allows developers to manipulate Word 2007/2010/2013 files, i ...

  6. POI写入word docx 07 的两种方法

    下载最新jar包:http://poi.apache.org/download.html 以及API 1.写入word 1.1 直接通过XWPFDocument生成 在使用XWPFDocument写d ...

  7. 10-利用com组件读取office

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  8. 打开和写入word文档

    一. 使用win32读取word内容 # -*- coding: utf-8 -*- from win32com import client as wc def readDocx2(): word = ...

  9. C#中创建、打开、读取、写入、保存Excel的一般性代码

    ---转载:http://hi.baidu.com/zhaocbo/item/e840bcf941932d15fe358228 1. Excel对象微软的Excel对象模型包括了128个不同的对象,从 ...

随机推荐

  1. 粘滞位(sticky bit)

    linux特殊权限:setUid, setGid, 粘着位(sticky) (1)目录的X权限(执行) 文件的可执行权限很简单,也就是可否执行它的意思,但目录的执行权限又代表什么意思呢? 当然不可能是 ...

  2. 实现目标文件与源码分开的makefile测试实验

    uboot提供了两种编译策略,即可以将生成的目标文件与源码混在一起,也可以将生成的目标文件与源码分开.通过对uboot Makefile的分析,笔者编写了一个简单的实现这种功能的Makfile. 顶层 ...

  3. linux JAVA JDK环境配置

    export JAVA_HOME=/usr/local/jdk1.7.0_45export JRE_HOME=/usr/local/jdk1.7.0_45/jreexport CLASSPATH=.: ...

  4. 基于Maven的spring_security入门

    配置文件的修改点没什么变化,可以参考:http://blog.csdn.net/ouitiken/article/details/8830505 pom.xml的依赖参考: <dependenc ...

  5. iOS开发控制器之间传值的几种小方法

    在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...

  6. jap中文转码

    因为js url在传值的过程中使用的是js自己默认的字符集编码规则,我们必须把它转成属于我们自己的编码规格,JSP页面 url=encodeURI(encodeURI(url)); //用了2次enc ...

  7. [cocos2dx动作]CCLabel类数字变化动作

    cococs2dx的CCLabel类的数字变化动作 介绍: 简单的数字变化动作(适用于CCLabel类对象, 包括CCLabelTTF, CCLabelAtlas, CCLabelBMFont等等) ...

  8. perl 对象

    唯一标识: 很明显,一个%employee 是不够的,每个雇员都要求有一个唯一标识和他或她自己的属性集合. 你可以动态的分配这个数据结构,也可以返回一个指向局部数据结构的引用 Vsftp:/root/ ...

  9. 关于PowerBuilder 9.0中如何修改项目工程名字

    关于PowerBuilder 9.0中如何修改项目工程名字,首先要找到三个文件,xxx.pbl.xxx.pbt.xxx.pbw这三个文件,为何要找这个三号个文件呢? 因为在使用PowerBuilder ...

  10. Muduo源码库研究(笔记汇总)

    声明: 本人学习Muduo源码, 有些代码会对其进行精简, 加上本人的一些理解, 所以与作者的代码可能有些不同. 如有理解错误的地方欢指出. Muduo基础库-时间戳类 http://www.cnbl ...