DocX组件读取与写入Word
本文转载: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的更多相关文章
- 数据字典生成工具之旅(5):DocX组件读取与写入Word
由于上周工作比较繁忙,所以这篇文章等了这么久才写(预告一下,下一个章节正式进入NVelocity篇,到时会讲解怎么使用NVelocity做一款简易的代码生成器,敬请期待!),好了正式进入本篇内容. 这 ...
- word模板导出的几种方式:第三种:标签替换(DocX组件读取与写入Word)
dll文件下载地址:https://files-cdn.cnblogs.com/files/daizhipeng/DocX.rar DocX wordDocumentOld = DocX.Load(S ...
- Spire.Doc组件读取与写入Word
之前写了一篇开源组件DocX读写word的文章,当时时间比较匆忙选了这个组件,使用过程中还是有些不便,不能提前定义好模版,插入Form表单域进行替换.最近无意中发现Spire.Doc组件功能很强大,目 ...
- [php]在PHP中读取和写入WORD文档的代码
测试平台windows 使用的windows的com主键. <? // 建立一个指向新COM组件的索引 $word = new COM("word.application") ...
- Docx组件读写Word文档介绍
Docx介绍 官方原文:DocX is a .NET library that allows developers to manipulate Word 2007/2010/2013 files, i ...
- POI写入word docx 07 的两种方法
下载最新jar包:http://poi.apache.org/download.html 以及API 1.写入word 1.1 直接通过XWPFDocument生成 在使用XWPFDocument写d ...
- 10-利用com组件读取office
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- 打开和写入word文档
一. 使用win32读取word内容 # -*- coding: utf-8 -*- from win32com import client as wc def readDocx2(): word = ...
- C#中创建、打开、读取、写入、保存Excel的一般性代码
---转载:http://hi.baidu.com/zhaocbo/item/e840bcf941932d15fe358228 1. Excel对象微软的Excel对象模型包括了128个不同的对象,从 ...
随机推荐
- REST API之前端跨域访问
关键字:跨域访问,cross-origin, NodeJS, REST API, JavaScript, Access-Control-Allow-Origin 1.新建并运行一个 NodeJS的se ...
- __construct()和__initialize()
ThinkPHP中的__initialize()和类的构造函数__construct()网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下.将结果和大家分享.不对 ...
- C语言学习总结(二) 运算流程
第三章.基本运算 (运算符.算数运算符.关系运算符.逻辑运算符.三目运算符.ASXLL码) 一.什么是运算符? 概念:是编译程序执行特定的算术或逻辑操作的符号: 分类:算术运算符. 关系运算符.逻辑运 ...
- jquery直接获取html页面元素
大家都会用$('div')来获取div并对其进行一些操作,今天用到一个函数发现$('div')与getElementBy系列函数得到的对象并不一样. 然后去查了下,发现$('div')得到的是一个数组 ...
- STM32与S3C2440的区别
一.定位 STM32: 高功能单片机.工业控制 S3C2440: 处理器.智能设备 二.跑系统 STM32: ucos-II S3C2440: Linux等大型系统 三.硬件架构 STM32: C ...
- C# net部署图片分布式存储服务器的小案例
如果web服务用户多了,访问多了,用户上传的图片,文件等内容放在一块,想必服务器是承受不住的,这个时候,我们就需要考虑分布式存储的方法了. 如图所示:一个web服务器拖2个图片服务器 如何做到用户上传 ...
- bzoj 2510: 弱题 循环矩阵
2510: 弱题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 124 Solved: 61[Submit][Status][Discuss] De ...
- 利用MSF溢出攻击讲解
msf的强大之处也就不做探讨了,虽然这些东西网上很多.但我想说说我的感受. 这次的演示是在BT5中远程攻击一台win2003 sp2 metasploit是4.3的 需要说明的一点是 现在的BT5中不 ...
- Security 可视化
http://web.cs.ucdavis.edu/~ma/SecVis/ http://research.dbvis.de/security/tools/clockview/ http://raff ...
- USB究竟是什么?看完这篇文章我就明白了!
在早期,USB接口的出现似乎仅仅是要解决一些简单外设诸如鼠标.键盘之类的设备与电脑的连接问题,很显然,这些外设所产生的数据量是极低的,所以,USB规范所定义的数据速率是1.5Mbps,数据还是双向分时 ...