开源Office Word——DocX
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/
2、DocX主要长处
DocX组件眼下的最新版本号是V1.0.0.12,主要特点有:
1.支持在文件里插入、删除和替代文本,支持全部的文本格式,如字体,下划线,高亮等。
2.支持插入图片、超链接、表格、页眉页脚以及自己定义属性等。
3.支持类似JQuery的链式写法,非常方便编程开发。
4、不用在server上安装微软的office软件,便能够使用
5、轻量级,读写的速度快,我以前用过aspose、wps开发,没有做过详细測试分析,可是能够感觉出明显速度快非常多
3、DocX缺点
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);
}
上面是的写法尽管简便,可是有不足之处就是
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的更多相关文章
- Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享
Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享 在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑&qu ...
- 老牌开源Office操作组件NPOI现已支持.NET Core
昨天在微信群里听到老牌Excel开发利器NPOI的作者瞿总说4.6.1版本的NPOI已经支持.NET Standard 2.0了,这也就意味着你可以在.NET Core中使用NPOI了. 作者:依乐祝 ...
- 使用ABAP编程实现对微软Office Word文档的操作
SAP ABAP里提供了一个标准的类CL_DOCX_DOCUMENT,提供了本地以".docx"结尾的微软Office word文档的读和写操作. 本文介绍了ABAP类CL_DOC ...
- C#操作Office.word(二)
在上一篇文章"C#操作Office.word(一)"中我们讲述了如何使用VS2010引用COM中Miscrosoft Word 14.0 Object Library实现创建文档, ...
- C#操作Office.word(一)
该文章主要是讲述如何使用VS2010创建word文档,因为在项目中我们可能需要点击一个按钮把数据库中的项目表单或图片显示到word文档中,因此该文章主要分析如何使用VS2010创建word文档并填写相 ...
- 解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题
一.起因 这几天在做电子签章问题,要通过替换docx文件中的占位符生成包含业务数据的合同数据,再转换成html文件,转换成pdf文件.遇到的问题是:通过apache poi转换docx到html时,原 ...
- XWPFDocument创建和读取Office Word文档基础篇(一)
注:有不正确的地方还望大神能够指出,抱拳了 老铁! 参考API:http://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFDo ...
- 打开word文档时提示“Microsoft Office Word已停止工作”
我的电脑(Win10)有Office 2003和2013两个版本,可能由于之前超长待机等原因导致word 2003的文件(.doc)不能正常打开,没次都会提示“Microsoft Office Wor ...
- java 使用 POI 操作 XWPFDocumen 创建和读取 Office Word 文档基础篇
注:有不正确的地方还望大神能够指出,抱拳了 老铁! 参考 API:http://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFDoc ...
随机推荐
- CImageList使用简要说明
CImageList ImageList;//创建一个包含3个24位色32x32图片的ImageList,ILC_MASK的意思是同时创建一个mask,这样在下面指定了背景颜色以后ImageList就 ...
- javascript实现的可改变滚动方向的无缝滚动
效果图如下: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- 实现 select中指定option选中触发事件
我们在用到下拉列表框select时,需要对选中的<option>选项触发事件,其实<option>本身没有触发事件方法,我们只有在select里的onchange方法里触发. ...
- codeforces 659B Qualifying Contest
题目链接:http://codeforces.com/problemset/problem/659/B 题意: n个人,m个区.给出n个人的姓名(保证不相同),属于的区域,所得分数.从每个区域中选出成 ...
- Python heapq 模块的实现 - A Geek's Page
Python heapq 模块的实现 - A Geek's Page Python heapq 模块的实现
- UIButton return(textField textView)
首先设置TextField 或 TextView的 delegate /////UITextView - (BOOL)textView:(UITextView *)textView shouldCha ...
- poj 3270 更换使用
1.确定初始和目标状态. 明确.目标状态的排序状态. 2.得出置换群,.比如,数字是8 4 5 3 2 7,目标状态是2 3 4 5 7 8.能写为两个循环:(8 2 7)(4 3 5). 3.观察当 ...
- javascript面向对象程序设计
在学习js面向对象编程之前,首先须要知道什么是面向对象.面向对象语言都有类的概念,通过它能够创建具有同样属性和方法的对象.但js并没有类的概念,因此js中的对象和其它语言的对象有所不同. js对象能够 ...
- python语言学习3 ——第一个python程序
输入exit即退出,这样写的缺点是没有保存已经写的代码,下次需要重新写
- hdu4635(强连通缩点)
传送门:Strongly connected 题意:求最多可以加多少边,使得最新的图还不是强连通图. 分析:最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数 ...