• 开源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、不用在server上安装微软的office软件,便能够使用

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

    3DocX缺点

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

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

    4、我使用的开发环境

    1win7

    2vs2010

    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类,由于我发现用不上了,研究良久也没有发现要怎么样才干用上,郁闷中。。。有好方法的同学请指教。完,有什么不正确的地方望大家斧正



  • 相关阅读:
    JVM 源码分析
    GGGGCCCC
    正则化(Regularization)、过拟合(Overfitting)
    名校课程
    数据库垂直拆分 水平拆分
    运维角度浅谈MySQL数据库优化
    表的垂直拆分和水平拆分
    Eclipse去掉对JS文件的Validation
    Linux定时任务工具crontab详解及系统时间同步
    高性能分布式哈希表FastDHT
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3980018.html
Copyright © 2020-2023  润新知