将数据库数据导出为Excel格式的表格想必是大家很常用的功能。那么在Extjs又该怎么鸟呢?先前在网上查的方案是用其自带的com对象,浪费了好几天时间连生成一个excel模板都没搞定,无奈放弃。继而大牛推荐用Aspose.Cells,发现非常简单而且效果也不错。
- &=DataSource.Field,&=[DataSource].[Field]是对DataTable和几何类型的引用,将会从当前行开始竖直向下生成多行数据。
- &=$data:是对变量或数组的引用。数组存在skip,horizontal等属性,具体参见官方网站
- &=&=动态公式计算;{r}当前行,{c}当前列,{-n},{n}当前行或列的偏移量前n或后n。
- &==是动态计算,如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模板中的一致。