开源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/

2DocX主要优点

DocX组件目前的最新版本是V1.0.0.12,主要特点有:

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

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

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

4、不用在服务器上安装微软的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,布布扣,bubuko.com

时间: 2024-10-05 19:18:50

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

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

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享 在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑",如果是两个字那就是"巨坑"=>因为这个需求一开始并不是这样子的,且听我漫漫道来: 一开始客户与我们商量的是将office和PDF上传,将此类文件解析成html格式,在APP端调用内置server直接以html"播放" 经历一个月~,两个月~,三个月~~~

C#操作Office.word(二)

在上一篇文章"C#操作Office.word(一)"中我们讲述了如何使用VS2010引用COM中Miscrosoft Word 14.0 Object Library实现创建文档,而这篇文章将讲述如何添加表格和图片,因为我在C#联系数据库做销售系统中需要打印表单,,我想以图表形式显示在word中,同时生成相应的饼状图或柱状图,所以才有查阅了相关资料,完成文章,供大家分享.其中使用openFileDialog控件也是希望大家学习了解下. 一. 界面设置 在界面上增加一个按钮,点击这个按钮

【翻译自mos文章】 怎么对Microsoft (Office) Word Document 2007 索引化?

怎么对Microsoft (Office) Word Document 2007 索引化? 来源于:How To Index a Microsoft (Office) Word Document 2007 ? (文档 ID 752710.1) 适用于: Oracle Text - Version: 11.1.0.7 to 11.2.0.3 - Release: 11.1 to 11.2 Information in this document applies to any platform. 目

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

一.起因 这几天在做电子签章问题,要通过替换docx文件中的占位符生成包含业务数据的合同数据,再转换成html文件,转换成pdf文件.遇到的问题是:通过apache poi转换docx到html时,原生的表格文件可以正常显示,但是我通过代码生成的表格只有数据,而不展示边框. 二.问题分析 google了一下发现有人碰到过类似问题,但是没有找到解决方法.现成的没有只能自己研究. 贴上简单的填充表格内容的java代码 1 private void replaceTable(XWPFDocument

Atitit.office&#160;word&#160;&#160;excel&#160;&#160;ppt&#160;pdf&#160;的web在线预览方案与html转换方案&#160;attilax&#160;总结

Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word  excel pdf 的web预览要求1 1.1. 显示效果要好1 1.2. 可以自定义显示界面1 1.3. 不需要控件,兼容性好1 1.4. 支持编辑操作1 2. 纯html预览解决之道(自由的格式)1 3. 转换swf flash方案2 4. 转换pdf方式..更多的浏览器已经直接支持pdf格式查看2 5. 控件方式2 6. Hyb

Office word 2013中直接调用MathType的方法

Office word 2013中直接调用MathType的方法 | 浏览:4403 | 更新:2014-02-20 14:45 | 标签: word 使用Office word 2013的用户肯定早已注意到在编辑文档时MathType无法直接调用,但是点击文档中的公式时能够跳出MathType的公式编辑窗口.其实,这一问题可以通过简单设置让 MathType 集成到Office Word 2013中. 工具/原料 Office word 2013软件.MathType软件 方法步骤 安装Mat

使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结

[超详细教程]使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结 去年就知道有这个功能,不过没去深究总结过,最近有写网络博客的欲望了,于是又重新拾起这玩意儿. 具体到底是用Windows Live Writer 2012还是用Word 2013,个人觉得看个人,因为这2个软件各有优点,各有缺点. 1.首先用LiveWriter发博客显然更专业,发布后的效果也与本地最接近,但是在编辑功能上肯定大不如Word,另外一个最大缺点是它本地保存

使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园

引用六仙庵的博客:[超详细教程]使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结 - 六仙庵 - 博客园http://www.cnblogs.com/liuxianan/archive/2013/04/13/3018732.html 不过在安装Windows Live Writer 2012的时候出了点小问题. 微软官方的解释 .NET Framework 3.5 安装错误:0x800F0906.0x800F081F.0x800F0

解决“Microsoft Office Word遇到问题需要关闭”

有时候打开word文档,会遇到"Microsoft Office Word遇到问题需要关闭",这让我们很郁闷.怎么办呢? 打开"文件夹选项",选择"显示所有文件和文件夹". 进入C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates,会看到2个文件. 选中这两个文件,删除. 重新打开word文档,这时候能打开了. 打开WORD时提示:"打印