zoukankan      html  css  js  c++  java
  • 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

    我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现。

    我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示。

    使用Aspose.Cell控件实现Excel高难度报表的生成(一)

    使用Aspose.Cell控件实现Excel高难度报表的生成(二)

    使用Aspose.Cell控件实现Excel高难度报表的生成(三)

    使用Aspose.Cell控件实现多个Excel文件的合并

    以及关于Word的操作的《利用Aspose.Word控件实现Word文档的操作

    这些都是我本人的总结,是实实在在的从项目中来,到博客中去的经验总结,本篇主要介绍在Web的模板化文档输出中,Aspose.Word控件和Aspose.Cell控件的使用操作。

    1、Word模板化的文档导出

    模板化的输出,首先是在预定义好固定的模板,然后绑定数据源或者替换相关的文字实现模板化文档的导出操作。

    在Aspose.Word的操作对象中,我们可以使用文本替换的方式实现模板内容的修改,简单的操作如下所示。

    Document doc = new Document(MyDir + "Document.doc");
    doc.Range.Replace("wuhuacong", "伍华聪", false, true);

    也可以以书签引用替换的方式实现,首先要定义好相应的标签引用,操作如下。

    在一个Word文档中某固定位置插入一个标签引用,在Word(2007、2010)的【插入】-【书签】中插入指定位置的书签引用,如下所示。

    替换标签内容的代码如下所示。

    Aspose.Words.Bookmark bookmark = doc.Range.Bookmarks["ACCUSER_SEX"];
     if (bookmark != null)
     {
          bookmark.Text = "";
     }

    为了较好展示操作效果,我们先来固定一个Word的模板文档,如下所示。

    实现模板化的文档导出,我这里结合两种方式实现内容的替换操作,一个是使用文字替换,一个是使用标签引用,两部分的代码如下所示。

            protected void btnGenWord_Click(object sender, EventArgs e)
            {
                Dictionary<string, string> dictSource = new Dictionary<string, string>();
                dictSource.Add("TIS_HANDLE_NO", "T0001");
                dictSource.Add("ACCUSE_INDUSTRY", "出租车");
                dictSource.Add("ACCUSER_NAME", "张三");
    
                string templateFile = Server.MapPath("./Templates/Advice.doc");
                Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);
    
                //使用文本方式替换
                foreach (string name in dictSource.Keys)
                {                
                    doc.Range.Replace(name, dictSource[name], true, true);
                }
    
                #region 使用书签替换模式
    
                Aspose.Words.Bookmark bookmark = doc.Range.Bookmarks["ACCUSER_SEX"];
                if (bookmark != null)
                {
                    bookmark.Text = "";
                }
                bookmark = doc.Range.Bookmarks["ACCUSER_TEL"];
                if (bookmark != null)
                {
                    bookmark.Text = "1862029207*";
                } 
    
                #endregion
    
                doc.Save(Response, "testAdvice.doc", Aspose.Words.ContentDisposition.Attachment,
                    Aspose.Words.Saving.SaveOptions.CreateSaveOptions(Aspose.Words.SaveFormat.Doc));
            }

    基于Asp.NET的界面如下所示。

    生成的模板化文档如下所示,整个文档是基于固定模板输出,因此比较标准和统一化。

    2、Aspose.Cell模板化的文档导出

    Aspose.Cell的模板化文档也是类似,也有两种方式可以操作,一种是替换文本,一种是绑定数据源的方式实现,具体可以参考一下我前面的列出随笔,对于Apsose.Cell来说,绑定数据源的功能非常强大。

    绑定数据源是通过在模板中设置变量对象方式,变量对象是通过&=来引用,对象的属性或者列名,通过如&=Customer.City方式引用,非常直观方便。

    这种方式的变量对象支持简单对象,如下所示。

    也支持复杂的集合对象,如下所示。

    为了演示模板化的文档导出,我这里设计了一个固定的Excel模板,通过两种方式实现数据的替换,先定义Excel模板如下所示。

    后台绑定数据的代码如下所示。

            protected void btnGenExcel_Click(object sender, EventArgs e)
            {
                Dictionary<string, string> dictSource = new Dictionary<string, string>();
                dictSource.Add("TIS_HANDLE_NO", "T0001");
                dictSource.Add("ACCUSE_INDUSTRY", "出租车");
                dictSource.Add("ACCUSER_NAME", "张三");
    
                string templateFile = Server.MapPath("./Templates/Advice.xls");
                WorkbookDesigner designer = new WorkbookDesigner();
                designer.Open(templateFile);
    
                Aspose.Cells.Worksheet worksheet = designer.Workbook.Worksheets[0];
                //使用文本替换
                foreach (string name in dictSource.Keys)
                {                
                    worksheet.Replace(name, dictSource[name]);
                }
    
                //使用绑定数据方式替换
                designer.SetDataSource("ACCUSER_SEX", "");
                designer.SetDataSource("ACCUSER_TEL", "1862029207*");
                designer.Process();
    
                designer.Save("testAdvice.xls", SaveType.OpenInExcel, FileFormatType.Excel2003, Response);
            }

    以上就是使用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出的相关操作过程及代码,希望对大家有帮助,也作为我的一个总结,以后参考,呵呵,欢迎互相沟通研究。

    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    【Azure 应用服务】App Service中运行Python 编写的 Jobs,怎么来安装Python包 (pymssql)呢?
    【Azure 存储服务】使用POST方式向Azure Storage Queue中插入Message的办法
    【Azure Developer】使用Azure Resource Graph的查询语法的示例
    img标签到底是行内元素还是块级元素
    [前端面试]前端缓存问题看这篇,让面试官爱上你
    Vue3.0 响应式数据原理:ES6 Proxy
    几行代码教你解决微信生成海报及二维码
    冷门的HTML
    HTML选择器
    程序猿必备 代码保平安
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/2893191.html
Copyright © 2011-2022 走看看