1.前言

请阅读前请看以下这位大神的文章

http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html

另附两个附件

1、DocX.DLL 

2、DocX开源文档(因为原作者非常懒,开发文档才写到V1.0.0.10到,这但是我找了好久才找到的,打开可能会无法显示,鼠标右键,好像有个什么危害之类的选项,并非病毒,你懂的)

DocX原作者是,忘记叫什么名字了,给个连接吧,支持原著 http://docx.codeplex.com/

2DocX主要长处

DocX组件眼下的最新版本号是V1.0.0.12,主要特点有:

1.支持在文件里插入、删除和替代文本,支持全部的文本格式,如字体,下划线,高亮等。

2.支持插入图片、超链接、表格、页眉页脚以及自己定义属性等。

3.支持类似JQuery的链式写法,非常方便编程开发。

4、不用在server上安装微软的office软件,便能够使用

5、轻量级,读写的速度快,我以前用过aspose、wps开发,没有做过详细測试分析,可是能够感觉出明显速度快非常多

3DocX缺点

1、功能不够完好,可是算是能满足大众需求了

2、不技能office2003,仅仅支持office2007版本号以上打开,2013打开有些问题

4、我使用的开发环境

1、win7

2、vs2010

5、实现的功能——插入表格数据

今天,我们来讲一下怎样在word中的表格插入数据,这个应该也是相对来比較有用的功能,也算是为上面这位大神补充回善资料吧。

咳咳,我想在这里多说两牢骚话,首先是我实际项目中要用到,依据项目的需求死活没实用到Excel表格,不然我就用NPOI了,然后我是走了非常多弯路,从Aspose组件到wps组件,苦苦折腾了两周,最后放弃了他们,aspose太慢太臃肿,wps偶尔有bug(可能是我技术问题),最后还是经别人推荐用了这个轻量级的DocX组件,以下開始正题。

有经验的程序猿都知道,在表格的数据里,都会涉及到循环遍历,没错,我实现的这个功能也是要用以遍历的。

下面是代码、凝视:(说明一下我这个是在模板的基础上插入数据的)

string path;
stringdocName;
//首先用using把初始化载入模板的代码放到括号中
using (DocXdocx = DocX.Load(docPath)) //
{
//把文档中我做的字符串标记替换成DataTable里面的数据(如“Project_Name”)
docx.ReplaceText("Project_Name",dt.Rows[0]["ProjectName"].ToString());
docx.ReplaceText("Leader_Installer",dt.Rows[0]["Engineer"].ToString());
docx.ReplaceText("Production_Info",dt.Rows[0]["ModuleID"].ToString());
docx.ReplaceText("Project_Duration","暂Y无T");
docx.ReplaceText("Report_Date",DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss"));
docx.ReplaceText("Current_Session",DateTime.Now.ToString("暂Y无T")); //实例化一个DocX中的一个Table类(插入表格数据用)
TablenewTable = docx.Tables[1];//这里取的是模板里的第二表格
//实例化一个DocX中的一个Formatting类(格式化数据用),并加入一些格式,字体为红色
Formattingformating =new Formatting();
formating.FontColor=System.Drawing.Color.Red;
//formating.Spacing = 200;
//循环遍历找到的表格
for(int i = 0; i < dt.Rows.Count; i++)
{
//在第i行中插入字段Name newTable.Rows[i].Cells[0].InsertParagraph(dt.Rows[i]["Name"].ToString(),false, formating);
//在第i行中插入字段TitlenewTable.Rows[i].Cells[1].InsertParagraph(dt.Rows[i]["Title"].ToString(),false, formating);
//在表格后追加一行
newTable.InsertRow();
}
docName= "/" + DateTime.Now.ToString("yyyy-mm-dd")+”Project Daily Report.docx";
path= Folders.GenerateFiles.Project + docName;
path= newWebService().Server.MapPath(path);
//另存为
docx.SaveAs(path);
}

上面是的写法尽管简便,可是有不足之处就是

  1. Formatting类的格式控制不够全,不能控制行高,必须在Row类中才干控制行

经过研究,以下是还有一种写法,相对上面的样例的写法略微复杂一些,可是能更灵活的控制格式,

stringpath;
stringdocName;
using(DocXdocx = DocX.Load(docPath))
{
docx.ReplaceText("Project_Name",dt.Rows[0]["ProjectName"].ToString());
docx.ReplaceText("Leader_Installer",dt.Rows[0]["Engineer"].ToString());
docx.ReplaceText("Production_Info",dt.Rows[0]["ModuleID"].ToString());
docx.ReplaceText("Project_Duration","暂Y无T");
docx.ReplaceText("Report_Date",DateTime.Now.ToString("yyyy-mm-ddhh:mm:ss"));
docx.ReplaceText("Current_Session",DateTime.Now.ToString("暂Y无T")); //Dictionary<string,CustomProperty> lists = docx.CustomProperties;
TablenewTable = docx.Tables[1];
for(inti = 0; i < dt.Rows.Count; i++)
{
//获取第i行
Rowrow = newTable.Rows[i];
//设置第i行的高
row.Height= 30d;
//设置第i行第1列垂直居中
row.Cells[0].VerticalAlignment= VerticalAlignment.Center;
//获取第i行第一个段落,事实上差点儿相同也就是第i行第1列的单元格(段落在这里我也没有理解透,我想段落应该也是单独的一格子吧,相当于单元格中还包裹着一个段落)
Paragraphparagraph = row.Paragraphs[0];
//把数据库字段为Name的数据放到段落中去,然后加上红色
paragraph.Append(dt.Rows[i]["Name"].ToString()).Color(System.Drawing.Color.Red); //以下反复了,同理
row.Cells[1].VerticalAlignment= VerticalAlignment.Center;
Paragraphparagraph1 = row.Paragraphs[1];
paragraph1.Append(dt.Rows[i]["Title"].ToString());
paragraph1.Color(System.Drawing.Color.Red);
newTable.InsertRow();
} docName= "/"+ ProjectDaily Report.docx";
path= newWebService().Server.MapPath(path);
docx.SaveAs(path);
}

在看完代码后,你会发现,我这里省略了Formatting类,由于我发现用不上了,研究良久也没有发现要怎么样才干用上,郁闷中。。。有好方法的同学请指教。完,有什么不正确的地方望大家斧正

开源Office Word——DocX的更多相关文章

  1. Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享

    Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享 在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑&qu ...

  2. 老牌开源Office操作组件NPOI现已支持.NET Core

    昨天在微信群里听到老牌Excel开发利器NPOI的作者瞿总说4.6.1版本的NPOI已经支持.NET Standard 2.0了,这也就意味着你可以在.NET Core中使用NPOI了. 作者:依乐祝 ...

  3. 使用ABAP编程实现对微软Office Word文档的操作

    SAP ABAP里提供了一个标准的类CL_DOCX_DOCUMENT,提供了本地以".docx"结尾的微软Office word文档的读和写操作. 本文介绍了ABAP类CL_DOC ...

  4. C#操作Office.word(二)

    在上一篇文章"C#操作Office.word(一)"中我们讲述了如何使用VS2010引用COM中Miscrosoft Word 14.0 Object Library实现创建文档, ...

  5. C#操作Office.word(一)

    该文章主要是讲述如何使用VS2010创建word文档,因为在项目中我们可能需要点击一个按钮把数据库中的项目表单或图片显示到word文档中,因此该文章主要分析如何使用VS2010创建word文档并填写相 ...

  6. 解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题

    一.起因 这几天在做电子签章问题,要通过替换docx文件中的占位符生成包含业务数据的合同数据,再转换成html文件,转换成pdf文件.遇到的问题是:通过apache poi转换docx到html时,原 ...

  7. XWPFDocument创建和读取Office Word文档基础篇(一)

    注:有不正确的地方还望大神能够指出,抱拳了 老铁!   参考API:http://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFDo ...

  8. 打开word文档时提示“Microsoft Office Word已停止工作”

    我的电脑(Win10)有Office 2003和2013两个版本,可能由于之前超长待机等原因导致word 2003的文件(.doc)不能正常打开,没次都会提示“Microsoft Office Wor ...

  9. java 使用 POI 操作 XWPFDocumen 创建和读取 Office Word 文档基础篇

    注:有不正确的地方还望大神能够指出,抱拳了 老铁! 参考 API:http://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFDoc ...

随机推荐

  1. 几款屏幕录制软件 ActivePresente

    几款屏幕录制软件,最强大是  ActivePresenter ,免费版, 足以应对我们日常需求.列表如下 支持系统:W-Windows,L-Linux,M-Mac 软件 格式 W L M 免费 说明 ...

  2. 怎样高速正确的安装 Ruby, Rails 执行环境

    对于新入门的开发人员,怎样安装 Ruby, Ruby Gems 和 Rails 的执行环境可能会是个问题,本页主要介绍怎样用一条靠谱的路子高速安装 Ruby 开发环境. 次安装方法相同适用于产品环境! ...

  3. ibatis新手入门

    ibatis 是什么 iBATIS是以SQL为中心的持久化层框架. 能支持懒载入.关联查询.继承等特性. iBATIS不同于一般的OR映射框架. OR映射框架,将数据库表.字段等映射到类.属性,那是一 ...

  4. Ubuntu升级到14.04

    公司网络实在太翔了,搞了一天最终成功把ubuntu从13.10升级到了14.10,中间也越到了非常多问题,记录下来,以备參考. 13.10的时候想体验一把搜狗输入法,结果因为fcitx版本号太低,用了 ...

  5. javascript (二) 事件

    <script></script> 函数写法: function  fun_name(){ x=docment.getElementById("demo") ...

  6. Java的一些基础小知识之JVM与GC (转)

    一.JVM是什么 Java虚拟机(英语:Java Virtual Machine,缩写为JVM),又名爪哇虚拟器,一种能够运行Java bytecode的虚拟机,以堆栈结构机器来进行实做.最早由太阳微 ...

  7. table明明设置了固定值

    IE真的快把我搞死了 0.0 可爱的迷人的让人醉了的IE你真棒 今天用表格写一个4列的表格 要实现的效果大概是这种 确有用普通浏览器都没有问题 非常easy明了的一个表格嘛!用IE8下面的看就成这样子 ...

  8. Java程序员们最常犯的10个错误(转)

    1.将数组转化为列表 将数组转化为一个列表时,程序员们经常这样做: 1 List<String> list = Arrays.asList(arr); Arrays.asList(&quo ...

  9. 怎样在Ubuntu上安装最新版本号的Node.js

    怎样在Ubuntu上安装最新版本号的Node.js 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Node.js是一个软件平台,通经常使用于构建大规模的 ...

  10. Easyui 让Window弹出居中

    原文:Easyui 让Window弹出居中 easyui1.3.2版本,window的弹出不会居中了.而dialog是会居中的,我们必须为为window的open事件做扩展 代码如下:只要加入以下代码 ...