zoukankan      html  css  js  c++  java
  • Extjs中将数据导出为Excel表格 子曰

    将数据库数据导出为Excel格式的表格想必是大家很常用的功能。那么在Extjs又该怎么鸟呢?先前在网上查的方案是用其自带的com对象,浪费了好几天时间连生成一个excel模板都没搞定,无奈放弃。继而大牛推荐用Aspose.Cells,发现非常简单而且效果也不错。

    1. &=DataSource.Field,&=[DataSource].[Field]是对DataTable和几何类型的引用,将会从当前行开始竖直向下生成多行数据。
    2. &=$data:是对变量或数组的引用。数组存在skiphorizontal等属性,具体参见官方网站
    3. &=&=动态公式计算;{r}当前行,{c}当前列,{-n},{n}当前行或列的偏移量前n或后n。
    4. &==是动态计算,如excel,if等语句。(if(logic_test,true_value,false_value))

    首先下载一个Aspose.Cells.dll文件并包含在项目中。

    在Extjs中的导出函数如下

     //执行导出的操作
        exportExcel: function () {
            if (!Ext.fly('frmDummy')) {
                var frm = document.createElement('form');
                frm.id = 'frmDummy';
                frm.name = id;
                frm.className = 'x-hidden';
                document.body.appendChild(frm);
            }
            Ext.Ajax.request({
                url: 'URL/Export.aspx',
                method: 'POST',
                form: Ext.fly('frmDummy'),
                isUpload: true,
                params: { file: 'UsersDesigner', name: escape('用户') }//file为excel模板的文件名,name为导出后的excel文件名
            });
        }


    后台获取数据在Export.cs示例代码如下

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Reflection;
    using System.Drawing;
    using System.Data.SqlClient;
    using System.Text;
    using Aspose.Cells;
    
    public partial class URL_Export : System.Web.UI.Page
    {
        private string subtitle;
        protected void Page_Load(object sender, EventArgs e)
        {
            string file = Request.Form["file"];
            string name = Server.UrlDecode(Request.Form["name"].ToString());
    
            DataSet ds = ;//要导出的数据源
            WorkbookDesigner designer = new WorkbookDesigner();
    
            string path = MapPath("~/Designer/" + file + ".xls");//模版路径
            designer.Open(path);
    
            designer.SetDataSource(ds);
            designer.SetDataSource("subtitle", subtitle);
    
            designer.Process();
            HttpBrowserCapabilities bc = HttpContext.Current.Request.Browser;
            string filename = "";
            if (bc.Browser == "IE")
                filename = HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8) + ".xls";
            else
                filename = name + ".xls";
            designer.Save(filename, SaveType.OpenInExcel, FileFormatType.Default, this.Response);
        }
    }
    

    Exel模板:

    自动生成序号一列写法为:&=&=IF($A{-1}="序号",1,($A{-1}+1))

    列求和:&=&=sum(C4:C{-1})

    生成的Excel:

    需要注意的是,后台生成的dataset名称(Table)要与Excel模板中的一致。

  • 相关阅读:
    SpringBoot返回json和xml
    Spring boot 集成MQ
    Spring boot freemarker 配置
    Spring boot 自定义注解标签记录系统访问日志
    RIDE对应驱动下载
    在线修改pdf识别图片
    记公司食堂收厨余垃圾的人
    [Ruby]使用Ruby抓取网页及加工处理
    [转载]SCSS 和 SASS 和 HAML 和CoffeeScript
    [ACM]反复平方法的两种写法
  • 原文地址:https://www.cnblogs.com/suixufeng/p/3336145.html
Copyright © 2011-2022 走看看