zoukankan      html  css  js  c++  java
  • Open Xml轻松实现Word套打(只实现加载数据部分)

    使用Open XML SDK 可以轻松实现Word套打,以往我们要实现Word套打有几种途径:

    1.    使用VBA编程

    2.    使用VSTO开发

    3.    使用第三方Com组件

     

    无论哪种方式都有很多前提条件比如需要安装Office,需要安装第三方的软件或者控件。

    如今, Open xml sdk允许在不安装Office的情况对Office相关文档进行操作, 为我们轻松实现套打打开了方便之门。

     

    实现方案:

    新建一个Word文档模版

    编程通过Open XML把数据写入模版 表格中

    使用Word打印

    就是这么简单。

     

    以下为实现案例:

    1.    新建一个Word 文档模版,在里面插入表格,保存。

    2. 编程写入数据到表格

      public void InsertData()

            {

                string destFileName = Application.StartupPath + _number + "_SGD.docx";

                if (System.IO.File.Exists(destFileName))

                    System.IO.File.Delete(destFileName);

                System.IO.File.Copy(this._templateFile, destFileName);

                using (WordprocessingDocument doc = WordprocessingDocument.Open(destFileName, true))

                {

     

                    var table = doc.MainDocumentPart.Document.Body.Descendants<OpenXMLWord.Table>().ToArray()[0];

                    var rows = table.Descendants<OpenXMLWord.TableRow>().ToArray();

                    var cells = rows[0].Elements<OpenXMLWord.TableCell>().ToArray();

                   

                    var content = new OpenXMLWord.Paragraph(new OpenXMLWord.Run(new OpenXMLWord.Text("测试")));

                   

                    cells[0].Append(content);

                    doc.MainDocumentPart.Document.Save();

                   

                }

            }

    结果如下:

     

    就是这么轻松,但是过程中有个小插曲,写完代码, 每次调用doc.MainDocumentPart.Document.Body.Descendants<Table>()都返回0条对象。一度怀疑Open XML SDK 有问题, 最后发现原因竟然是Open XML里有两个命名空间都有同名类(DocumentFormat.OpenXml.Drawing和DocumentFormat.OpenXml.Wordprocessing),而Open XML的Descendants泛型方法又都能接受这两个同名类型。 结果我用到了Drawing下的类,导致读取不到表格。

  • 相关阅读:
    侧边栏导航(移动端商品--评论--详情)随楼层滑动高亮显示
    PHP+Mamcached分布式部署方案设计
    【转载】关于thinkphp标签最大嵌套层数的问题
    滚动条滑动到指定位置
    PHP面向对象
    KindEditor使用过程中,用JQ提交表单时,获取不到编辑器的内容
    【转载】mysql导入大批量数据出现MySQL server has gone away的解决方法
    DAO层使用mybatis框架有关实体类的有趣细节
    spring boot集成MyBatis 通用Mapper 使用总结
    12 Spring Data JPA:springDataJpa的运行原理以及基本操作(下)
  • 原文地址:https://www.cnblogs.com/Hcsdn/p/6646471.html
Copyright © 2011-2022 走看看